👽 Vérifie que tous les éléments d'ui sont traduits

Tous les éléments à traduire (via la balise <Trans> ou la fonction 't')
sont analysé statiquement. Si il manque une traduction, la PR est bloquée

Ajoute un script de traduction automatique via `yarn run i18n:ui:translate`

Met à jour CONTRIBUTING.md avec les infos sur la traduction
pull/855/head
Johan Girod 2020-01-21 19:29:43 +01:00
parent 829ac4aa6f
commit d74b625be3
58 changed files with 1487 additions and 698 deletions

View File

@ -92,3 +92,35 @@ Enfin pour les tests d'intégration :
```sh
$ yarn run test-cypress
```
### Traduction 👽
Le site est disponible en français, et en anglais sur https://mycompanyinfrance.com
Les traductions de la base de règle se trouvent dans
`source/règles/externalized.yaml`. Celles de l'Ui sont dans le fichier
`source/locales/en.yaml`
La librairie utilisée pour la traduction de l'Ui est
[react-i18next](https://react.i18next.com/).
Lorsque l'on introduit une nouvelle chaîne de caractère dans l'UI il faut
systématiquement penser à gérer sa traduction, via un composant `<Trans>`, ou
via la fonction `t`
Le circle-ci fait une analyse statique du code pour repérer les chaînes non
traduites, dans le moteur et l'UI :
```sh
$ yarn run i18n:rules:check
$ yarn run i18n:ui:check
```
Pour traduire automatiquement les chaînes manquantes via l'api deepl :
```sh
$ yarn run i18n:rules:translate
$ yarn run i18n:ui:translate
```
N'oubliez pas de vérifier le diff que rien n'est choquant.

View File

@ -42,8 +42,8 @@ jobs:
- image: node
steps:
- install
- run: |
yarn run i18n:check-rules
- run: yarn run i18n:rules:check
- run: yarn run i18n:ui:check
unit-test:
docker:
- image: node

View File

@ -4,7 +4,7 @@ module.exports = {
contextSeparator: '_',
// Key separator used in your translation keys
createOldCatalogs: true,
createOldCatalogs: false,
// Save the \_old files
defaultNamespace: 'translation',
@ -19,7 +19,7 @@ module.exports = {
keepRemoved: false,
// Keep keys from the catalog that are no longer in code
keySeparator: '.',
keySeparator: false,
// Key separator used in your translation keys
// If you want to use plain english keys, separators such as `.` and `:` will conflict. You might want to set `keySeparator: false` and `namespaceSeparator: false`. That way, `t('Status: Loading...')` will not think that there are a namespace and three separator dots for instance.
@ -43,19 +43,19 @@ module.exports = {
lineEnding: 'auto',
// Control the line ending. See options at https://github.com/ryanve/eol
locales: ['en', 'fr'],
locales: ['fr'],
// An array of the locales in your applications
namespaceSeparator: ':',
namespaceSeparator: false,
// Namespace separator used in your translation keys
// If you want to use plain english keys, separators such as `.` and `:` will conflict. You might want to set `keySeparator: false` and `namespaceSeparator: false`. That way, `t('Status: Loading...')` will not think that there are a namespace and three separator dots for instance.
output: 'locales/$LOCALE.yaml',
output: 'source/locales/static-analysis-$LOCALE.json',
// Supports $LOCALE and $NAMESPACE injection
// Supports JSON (.json) and YAML (.yml) file formats
// Where to write the locale files relative to process.cwd()
input: undefined,
input: './source/**/*.{jsx,tsx,js,ts}',
// An array of globs that describe where to look for source files
// relative to the location of the configuration file
@ -63,7 +63,7 @@ module.exports = {
// For react file, extract the defaultNamespace - https://react.i18next.com/components/translate-hoc.html
// Ignored when parsing a `.jsx` file and namespace is extracted from that file.
sort: false,
sort: true,
// Whether or not to sort the catalog
useKeysAsDefaultValue: false,

View File

@ -89,8 +89,10 @@
"type-check": "tsc --noEmit",
"compile-lib": "yarn webpack --config source/webpack.lib.js",
"compile-dev": "FR_SITE='http://localhost:5000${path}' EN_SITE='http://localhost:5001${path}' yarn run compile",
"i18n:check-rules": "node source/scripts/check-missing-translation.js",
"i18n:translate-rules": "node source/scripts/automatic-translate.js",
"i18n:rules:check": "node source/scripts/i18n/check-missing-rule-translation.js",
"i18n:rules:translate": "node source/scripts/i18n/translate-rules.js",
"i18n:ui:check": "yarn run i18next && node source/scripts/i18n/check-missing-UI-translation",
"i18n:ui:translate": "yarn run i18next && node source/scripts/i18n/translate-ui.js",
"mon-entreprise:serve": "PORT=5000 serve --config serve.mon-entreprise.json --no-clipboard",
"mon-entreprise:test": "cypress open --browser chromium",
"mycompanyinfrance:serve": "PORT=5001 serve --config serve.infrance.json --no-clipboard",
@ -151,6 +153,7 @@
"html-loader": "^0.5.5",
"html-webpack-plugin": "^3.2.0",
"http-server": "^0.11.1",
"i18next-parser": "https://github.com/i18next/i18next-parser#master",
"intl": "^1.2.5",
"intl-locales-supported": "^1.0.0",
"isomorphic-fetch": "^2.2.1",

View File

@ -28,10 +28,10 @@ export default function Search() {
return (
<>
<h1>
<Trans key="trouver.titre">Retrouver mon entreprise</Trans>
<Trans i18nKey="trouver.titre">Retrouver mon entreprise</Trans>
</h1>
<p>
<Trans key="trouver.description">
<Trans i18nKey="trouver.description">
Grâce à la base SIREN, les données publiques sur votre entreprise
seront automatiquement disponibles pour la suite du parcours sur le
site.

View File

@ -24,11 +24,11 @@ export default function Newsletter() {
<>
{' '}
<h2>
<Trans key="newsletter.register.titre">Restez informé</Trans>
<Trans i18nKey="newsletter.register.titre">Restez informé</Trans>
</h2>
<div className="footer__newsletterContainer">
<p>
<Trans key="newsletter.register.description">
<Trans i18nKey="newsletter.register.description">
Inscrivez-vous à notre newsletter mensuelle pour recevoir des{' '}
<strong>conseils officiels sur la création dentreprise</strong> et
accéder aux nouvelles fonctionnalités en avant-première.

View File

@ -4,10 +4,7 @@ import React from 'react'
import { Trans } from 'react-i18next'
import { useDispatch, useSelector } from 'react-redux'
import { RootState } from 'Reducers/rootReducer'
import {
currentQuestionSelector,
nextStepsSelector
} from 'Selectors/analyseSelectors'
import { currentQuestionSelector, nextStepsSelector } from 'Selectors/analyseSelectors'
import { DottedName } from 'Types/rule'
export default function QuickLinks() {
@ -46,7 +43,7 @@ export default function QuickLinks() {
css="margin: 0 0.4rem !important"
onClick={() => dispatch(goToQuestion(dottedName))}
>
<Trans key={'quicklinks.' + label}>{label}</Trans>
<Trans i18nKey={'quicklinks.' + label}>{label}</Trans>
</button>
))}{' '}
{/* <button className="ui__ link-button">Voir la liste</button> */}

View File

@ -14,14 +14,16 @@ export default () => (
}}
>
<p>
<Trans key="404.message">Cette page n'existe pas ou n'existe plus</Trans>
<Trans i18nKey="404.message">
Cette page n'existe pas ou n'existe plus
</Trans>
{emoji(' 🙅')}
</p>
<Link to="/">
{/* TODO: credits for the image to add: https://thenounproject.com/term/treasure-map/96666/ */}
<img style={{ margin: '3%' }} width="100%" src={image} />
<em>
<Trans key="404.action">Revenir en lieu sûr</Trans>
<Trans i18nKey="404.action">Revenir en lieu sûr</Trans>
</em>
</Link>
</div>

View File

@ -103,7 +103,7 @@ function RevenueRepatitionSection() {
return (
<section>
<h2>
<Trans key="payslip.repartition">Répartition du total chargé</Trans>
<Trans i18nKey="payslip.repartition">Répartition du total chargé</Trans>
</h2>
<StackedBarChart
data={[
@ -112,7 +112,11 @@ function RevenueRepatitionSection() {
title: t('Revenu disponible'),
color: palettes[0][0]
},
{ ...getRule('impôt'), title: t('Impôts'), color: palettes[1][0] },
{
...getRule('impôt'),
title: t('quicklinks.Impôt'),
color: palettes[1][0]
},
{
...getRule('contrat salarié . cotisations'),

View File

@ -1,8 +1,5 @@
import { setSimulationConfig, setSituationBranch } from 'Actions/actions'
import {
defineDirectorStatus,
isAutoentrepreneur
} from 'Actions/companyStatusActions'
import { defineDirectorStatus, isAutoentrepreneur } from 'Actions/companyStatusActions'
import classnames from 'classnames'
import Conversation from 'Components/conversation/Conversation'
import SeeAnswersButton from 'Components/conversation/SeeAnswersButton'
@ -18,10 +15,7 @@ import { Trans } from 'react-i18next'
import { useDispatch, useSelector } from 'react-redux'
import { Link } from 'react-router-dom'
import { RootState } from 'Reducers/rootReducer'
import {
analysisWithDefaultsSelector,
branchAnalyseSelector
} from 'Selectors/analyseSelectors'
import { analysisWithDefaultsSelector, branchAnalyseSelector } from 'Selectors/analyseSelectors'
import { DottedName } from 'Types/rule'
import Animate from 'Ui/animate'
import InfoBulle from 'Ui/InfoBulle'
@ -77,7 +71,7 @@ export default function SchemeComparaison({
<h2 className="AS">
{emoji('☂')} <Trans>Assimilé salarié</Trans>
<small>
<Trans key="comparaisonRégimes.AS.tagline">
<Trans i18nKey="comparaisonRégimes.AS.tagline">
Le régime tout compris
</Trans>
</small>
@ -90,7 +84,7 @@ export default function SchemeComparaison({
<Trans>Indépendant</Trans>
)}
<small>
<Trans key="comparaisonRégimes.indep.tagline">
<Trans i18nKey="comparaisonRégimes.indep.tagline">
La protection sociale à la carte
</Trans>
</small>
@ -98,20 +92,20 @@ export default function SchemeComparaison({
<h2 className="auto">
{emoji('🚶‍♂️')} <Trans>Auto-entrepreneur</Trans>
<small>
<Trans key="comparaisonRégimes.auto.tagline">
<Trans i18nKey="comparaisonRégimes.auto.tagline">
Pour commencer sans risques
</Trans>
</small>
</h2>
<h3 className="legend">
<Trans key="comparaisonRégimes.status.legend">
<Trans i18nKey="comparaisonRégimes.status.legend">
Statuts juridiques possibles
</Trans>
</h3>
<div className="AS">
<div>
<Trans key="comparaisonRégimes.status.AS">
<Trans i18nKey="comparaisonRégimes.status.AS">
SAS, SASU ou SARL avec gérant minoritaire
</Trans>
</div>
@ -119,19 +113,19 @@ export default function SchemeComparaison({
<div className="indep">
<div>
{hideAssimiléSalarié ? (
<Trans key="comparaisonRégimes.status.indep.2">EI ou EIRL</Trans>
<Trans i18nKey="comparaisonRégimes.status.indep.2">EI ou EIRL</Trans>
) : (
<Trans key="comparaisonRégimes.status.indep.1">
<Trans i18nKey="comparaisonRégimes.status.indep.1">
EI, EIRL, EURL ou SARL avec gérant majoritaire
</Trans>
)}
</div>
</div>
<div className="auto">
<Trans key="comparaisonRégimes.status.auto">Auto-entreprise</Trans>
<Trans i18nKey="comparaisonRégimes.status.auto">Auto-entreprise</Trans>
</div>
<Trans key="comparaisonRégimes.AT">
<Trans i18nKey="comparaisonRégimes.AT">
<h3 className="legend">Couverture accidents du travail</h3>
</Trans>
<div className="AS">
@ -142,14 +136,14 @@ export default function SchemeComparaison({
<div className="indep-et-auto">
<Trans>Non</Trans>
</div>
<Trans key="comparaisonRégimes.assuranceMaladie">
<Trans i18nKey="comparaisonRégimes.assuranceMaladie">
<h3 className="legend">
Assurance maladie{' '}
<small>(médicaments, soins, hospitalisations)</small>
</h3>
<div className="AS-indep-et-auto">Identique pour tous</div>
</Trans>
<Trans key="comparaisonRégimes.mutuelle">
<Trans i18nKey="comparaisonRégimes.mutuelle">
<h3 className="legend">
Mutuelle santé
<small />
@ -158,13 +152,13 @@ export default function SchemeComparaison({
<div className="indep-et-auto">Fortement conseillée</div>
</Trans>
<Trans key="comparaisonRégimes.indemnités">
<Trans i18nKey="comparaisonRégimes.indemnités">
<h3 className="legend">Indemnités journalières</h3>
</Trans>
<div className="green AS">++</div>
<div className="green indep">++</div>
<div className="green auto">+</div>
<Trans key="comparaisonRégimes.retraite">
<Trans i18nKey="comparaisonRégimes.retraite">
<h3 className="legend">Retraite</h3>
</Trans>
<div className="green AS">+++</div>
@ -173,13 +167,13 @@ export default function SchemeComparaison({
{showMore ? (
<>
<Trans key="comparaisonRégimes.ACRE">
<Trans i18nKey="comparaisonRégimes.ACRE">
<h3 className="legend">ACRE</h3>
<div className="all">
1 an <small>(sous conditions d'éligibilité)</small>
</div>
</Trans>
<Trans key="comparaisonRégimes.déduction">
<Trans i18nKey="comparaisonRégimes.déduction">
<h3 className="legend">Déduction des charges</h3>
<div className="AS-et-indep">
Oui <small>(régime fiscal du réel)</small>
@ -193,7 +187,7 @@ export default function SchemeComparaison({
</div>
</Trans>
<Trans key="comparaisonRégimes.cotisations">
<Trans i18nKey="comparaisonRégimes.cotisations">
<h3 className="legend">Paiement des cotisations</h3>
<div className="AS">Mensuel</div>
<div className="indep">
@ -204,7 +198,7 @@ export default function SchemeComparaison({
</div>
<div className="auto">Mensuel ou trimestriel</div>
</Trans>
<Trans key="comparaisonRégimes.complémentaireDeductible">
<Trans i18nKey="comparaisonRégimes.complémentaireDeductible">
<h3 className="legend">
Contrats prévoyance et retraite facultatives déductibles
</h3>
@ -218,7 +212,7 @@ export default function SchemeComparaison({
<div className="auto">
<Trans>Non</Trans>
</div>
<Trans key="comparaisonRégimes.cotisationMinimale">
<Trans i18nKey="comparaisonRégimes.cotisationMinimale">
<h3 className="legend">Paiement de cotisations minimales</h3>
</Trans>
<div className="AS">
@ -230,7 +224,7 @@ export default function SchemeComparaison({
<div className="auto">
<Trans>Non</Trans>
</div>
<Trans key="comparaisonRégimes.seuil">
<Trans i18nKey="comparaisonRégimes.seuil">
<h3 className="legend">
Revenu minimum pour l'ouverture des droits aux prestations
</h3>
@ -241,7 +235,7 @@ export default function SchemeComparaison({
<div className="auto">Oui</div>
</Trans>
{!hideAutoEntrepreneur && (
<Trans key="comparaisonRégimes.plafondCA">
<Trans i18nKey="comparaisonRégimes.plafondCA">
<h3 className="legend">Plafond de chiffre d'affaires</h3>
<div className="AS-et-indep">
<Trans>Non</Trans>
@ -255,7 +249,7 @@ export default function SchemeComparaison({
</div>
</Trans>
)}
<Trans key="comparaisonRégimes.comptabilité">
<Trans i18nKey="comparaisonRégimes.comptabilité">
<h3 className="legend">
Gestion comptable, sociale, juridique...
</h3>
@ -273,7 +267,7 @@ export default function SchemeComparaison({
</Trans>
</>
) : (
<Trans key="comparaisonRégimes.comparaisonDétaillée">
<Trans i18nKey="comparaisonRégimes.comparaisonDétaillée">
<div className="all">
<button
onClick={() => setShowMore(true)}
@ -286,7 +280,7 @@ export default function SchemeComparaison({
)}
{conversationStarted && (
<>
<Trans key="comparaisonRégimes.période">
<Trans i18nKey="comparaisonRégimes.période">
<h3 className="legend">Unité</h3>
</Trans>
<div className="AS-indep-et-auto" style={{ alignSelf: 'start' }}>
@ -297,7 +291,7 @@ export default function SchemeComparaison({
<div className="all colored">
{!conversationStarted ? (
<>
<Trans key="comparaisonRégimes.simulationText">
<Trans i18nKey="comparaisonRégimes.simulationText">
<h3>
Comparer mes revenus, pension de retraite et indemnité maladie
</h3>
@ -320,7 +314,7 @@ export default function SchemeComparaison({
{conversationStarted &&
!!getRule('assimilé', 'revenu net après impôt')?.nodeValue && (
<>
<Trans key="comparaisonRégimes.revenuNetApresImpot">
<Trans i18nKey="comparaisonRégimes.revenuNetApresImpot">
<h3 className="legend">Revenu net après impôt</h3>
</Trans>
<div className="AS">
@ -356,7 +350,7 @@ export default function SchemeComparaison({
)}
</Animate.appear>
</div>
<Trans key="comparaisonRégimes.revenuNetAvantImpot">
<Trans i18nKey="comparaisonRégimes.revenuNetAvantImpot">
<h3 className="legend">
Revenu net de cotisations <small>(avant impôts)</small>
</h3>
@ -384,7 +378,7 @@ export default function SchemeComparaison({
)}
</div>
<h3 className="legend">
<Trans key="comparaisonRégimes.retraiteEstimation.legend">
<Trans i18nKey="comparaisonRégimes.retraiteEstimation.legend">
<span>Pension de retraite</span>
<small>(avant impôts)</small>
</Trans>
@ -396,7 +390,7 @@ export default function SchemeComparaison({
rule="protection sociale . retraite"
/>{' '}
<InfoBulle>
<Trans key="comparaisonRégimes.retraiteEstimation.infobulles.AS">
<Trans i18nKey="comparaisonRégimes.retraiteEstimation.infobulles.AS">
Pension calculée pour 172 trimestres cotisés au régime
général sans variations de revenus.
</Trans>
@ -412,7 +406,7 @@ export default function SchemeComparaison({
rule="protection sociale . retraite"
/>{' '}
<InfoBulle>
<Trans key="comparaisonRégimes.retraiteEstimation.infobulles.indep">
<Trans i18nKey="comparaisonRégimes.retraiteEstimation.infobulles.indep">
Pension calculée pour 172 trimestres cotisés au régime
des indépendants sans variations de revenus.
</Trans>
@ -437,7 +431,7 @@ export default function SchemeComparaison({
rule="protection sociale . retraite"
/>{' '}
<InfoBulle>
<Trans key="comparaisonRégimes.retraiteEstimation.infobulles.auto">
<Trans i18nKey="comparaisonRégimes.retraiteEstimation.infobulles.auto">
Pension calculée pour 172 trimestres cotisés en
auto-entrepreneur sans variations de revenus.
</Trans>
@ -449,7 +443,7 @@ export default function SchemeComparaison({
</span>
)}
</div>
<Trans key="comparaisonRégimes.trimestreValidés">
<Trans i18nKey="comparaisonRégimes.trimestreValidés">
<h3 className="legend">
Nombre de trimestres validés <small>(pour la retraite)</small>
</h3>
@ -482,7 +476,7 @@ export default function SchemeComparaison({
/>
)}
</div>
<Trans key="comparaisonRégimes.indemnités">
<Trans i18nKey="comparaisonRégimes.indemnités">
<h3 className="legend">
Indemnités journalières{' '}
<small>(en cas d'arrêt maladie)</small>
@ -559,7 +553,7 @@ export default function SchemeComparaison({
<div className="ui__ container">
<br />
<h3>
<Trans key="comparaisonRégimes.titreSelection">
<Trans i18nKey="comparaisonRégimes.titreSelection">
Créer mon entreprise en tant que :
</Trans>
</h3>
@ -572,7 +566,7 @@ export default function SchemeComparaison({
!hideAutoEntrepreneur && dispatch(isAutoentrepreneur(false))
}}
>
<Trans key="comparaisonRégimes.choix.AS">
<Trans i18nKey="comparaisonRégimes.choix.AS">
Assimilé&nbsp;salarié
</Trans>
</button>
@ -586,11 +580,11 @@ export default function SchemeComparaison({
}}
>
{hideAssimiléSalarié ? (
<Trans key="comparaisonRégimes.choix.EI">
<Trans i18nKey="comparaisonRégimes.choix.EI">
Entreprise individuelle
</Trans>
) : (
<Trans key="comparaisonRégimes.choix.indep">Indépendant</Trans>
<Trans i18nKey="comparaisonRégimes.choix.indep">Indépendant</Trans>
)}
</button>
{!hideAutoEntrepreneur && (
@ -602,7 +596,7 @@ export default function SchemeComparaison({
dispatch(isAutoentrepreneur(true))
}}
>
<Trans key="comparaisonRégimes.choix.auto">
<Trans i18nKey="comparaisonRégimes.choix.auto">
Auto-entrepreneur
</Trans>
</button>

View File

@ -25,14 +25,14 @@ export default function SimulateurWarning({
<p>
{emoji('🚩 ')}
<strong>
<Trans key="simulateurs.warning.titre">Avant de commencer...</Trans>
<Trans i18nKey="simulateurs.warning.titre">Avant de commencer...</Trans>
</strong>{' '}
{folded && (
<button
className="ui__ button simple small"
onClick={() => fold(false)}
>
<Trans key="simulateurs.warning.plus">Lire les précisions</Trans>
<Trans i18nKey="simulateurs.warning.plus">Lire les précisions</Trans>
</button>
)}
</p>
@ -45,7 +45,7 @@ export default function SimulateurWarning({
{simulateur == 'auto-entrepreneur' && (
<>
<li>
<Trans key="simulateurs.warning.auto-entrepreneur">
<Trans i18nKey="simulateurs.warning.auto-entrepreneur">
{' '}
Les auto-entrepreneurs ne peuvent pas déduire leurs charges
de leur chiffre d'affaires. Il faut donc{' '}
@ -56,7 +56,7 @@ export default function SimulateurWarning({
</Trans>
</li>
<li>
<Trans key="simulateurs.warning.cfe">
<Trans i18nKey="simulateurs.warning.cfe">
Le simulateur n'intègre pas la cotisation foncière des
entreprise (CFE) qui est dûe dès la deuxième année
d'exercice. Son montant varie fortement en fonction du
@ -70,7 +70,7 @@ export default function SimulateurWarning({
)}
{simulateur !== 'artiste-auteur' && (
<li>
<Trans key="simulateurs.warning.urssaf">
<Trans i18nKey="simulateurs.warning.urssaf">
Les calculs sont indicatifs et ne se substituent pas aux
décomptes réels des Urssaf, impots.gouv.fr, ou autres.
</Trans>
@ -80,7 +80,7 @@ export default function SimulateurWarning({
{simulateur === 'artiste-auteur' && (
<>
<li>
<Trans key="simulateurs.warning.artiste-auteur">
<Trans i18nKey="simulateurs.warning.artiste-auteur">
Cette estimation est proposée à titre indicatif. Elle est
faite à partir des éléments réglementaires applicables et
des éléments que vous avez saisis, mais elle ne tient pas
@ -89,7 +89,7 @@ export default function SimulateurWarning({
</Trans>
</li>
<li>
<Trans key="simlateurs.warning.artiste-auteur">
<Trans i18nKey="simlateurs.warning.artiste-auteur">
Ce simulateur permet d'estimer le montant de vos cotisations
pour l'année 2020 à partir de votre revenu projeté
</Trans>

View File

@ -1,7 +1,5 @@
import Controls from 'Components/Controls'
import Conversation, {
ConversationProps
} from 'Components/conversation/Conversation'
import Conversation, { ConversationProps } from 'Components/conversation/Conversation'
import SeeAnswersButton from 'Components/conversation/SeeAnswersButton'
import PageFeedback from 'Components/Feedback/PageFeedback'
import SearchButton from 'Components/SearchButton'
@ -43,7 +41,7 @@ export default function Simulation({
>
{progress < 1 ? (
<small css="padding: 0.4rem 0">
<Trans key="simulateurs.précision.défaut">
<Trans i18nKey="simulateurs.précision.défaut">
Affinez la simulation en répondant aux questions :
</Trans>
</small>
@ -64,7 +62,7 @@ export default function Simulation({
<br />
<PageFeedback
customMessage={
<Trans key="feedback.simulator">
<Trans i18nKey="feedback.simulator">
Êtes-vous satisfait de ce simulateur ?
</Trans>
}

View File

@ -1,24 +1,28 @@
import { setActiveTarget, updateSituation } from 'Actions/actions';
import InputSuggestions from 'Components/conversation/InputSuggestions';
import PeriodSwitch from 'Components/PeriodSwitch';
import RuleLink from 'Components/RuleLink';
import { ThemeColorsContext } from 'Components/utils/colors';
import { SitePathsContext } from 'Components/utils/withSitePaths';
import { formatCurrency } from 'Engine/format';
import { encodeRuleName } from 'Engine/rules';
import { isEmpty, isNil } from 'ramda';
import React, { useContext, useEffect, useState } from 'react';
import emoji from 'react-easy-emoji';
import { Trans, useTranslation } from "react-i18next";
import { useDispatch, useSelector } from 'react-redux';
import { Link } from 'react-router-dom';
import { RootState } from 'Reducers/rootReducer';
import { analysisWithDefaultsSelector, situationSelector, useTarget } from 'Selectors/analyseSelectors';
import { Rule } from 'Types/rule';
import Animate from 'Ui/animate';
import AnimatedTargetValue from 'Ui/AnimatedTargetValue';
import CurrencyInput from './CurrencyInput/CurrencyInput';
import './TargetSelection.css';
import { setActiveTarget, updateSituation } from 'Actions/actions'
import InputSuggestions from 'Components/conversation/InputSuggestions'
import PeriodSwitch from 'Components/PeriodSwitch'
import RuleLink from 'Components/RuleLink'
import { ThemeColorsContext } from 'Components/utils/colors'
import { SitePathsContext } from 'Components/utils/withSitePaths'
import { formatCurrency } from 'Engine/format'
import { encodeRuleName } from 'Engine/rules'
import { isEmpty, isNil } from 'ramda'
import React, { useContext, useEffect, useState } from 'react'
import emoji from 'react-easy-emoji'
import { Trans, useTranslation } from 'react-i18next'
import { useDispatch, useSelector } from 'react-redux'
import { Link } from 'react-router-dom'
import { RootState } from 'Reducers/rootReducer'
import {
analysisWithDefaultsSelector,
situationSelector,
useTarget
} from 'Selectors/analyseSelectors'
import { Rule } from 'Types/rule'
import Animate from 'Ui/animate'
import AnimatedTargetValue from 'Ui/AnimatedTargetValue'
import CurrencyInput from './CurrencyInput/CurrencyInput'
import './TargetSelection.css'
export default function TargetSelection() {
const [initialRender, setInitialRender] = useState(true)
@ -297,11 +301,11 @@ function AidesGlimpse() {
<strong>
<AnimatedTargetValue value={aides.nodeValue}>
<span>{formatCurrency(aides.nodeValue, language)}</span>
<Trans>AnimatedTargetValue>
</AnimatedTargetValue>
</strong>{' '}
<Trans>d'aides</Trans> {emoji(aides.explanation.icons)}
</RuleLink>
</div>
</Animate.appear>
)<Trans>
)
}

View File

@ -7,11 +7,7 @@ import emoji from 'react-easy-emoji'
import { Trans } from 'react-i18next'
import { useDispatch, useSelector } from 'react-redux'
import { RootState } from 'Reducers/rootReducer'
import {
currentQuestionSelector,
flatRulesSelector,
nextStepsSelector
} from 'Selectors/analyseSelectors'
import { currentQuestionSelector, flatRulesSelector, nextStepsSelector } from 'Selectors/analyseSelectors'
import * as Animate from 'Ui/animate'
import Aide from './Aide'
import './conversation.css'
@ -80,7 +76,7 @@ export default function Conversation({ customEndMessages }: ConversationProps) {
<div style={{ textAlign: 'center' }}>
<h3>
{emoji('🌟')}{' '}
<Trans key="simulation-end.title">
<Trans i18nKey="simulation-end.title">
Vous avez complété cette simulation
</Trans>{' '}
</h3>
@ -88,7 +84,7 @@ export default function Conversation({ customEndMessages }: ConversationProps) {
{customEndMessages ? (
customEndMessages
) : (
<Trans key="simulation-end.text">
<Trans i18nKey="simulation-end.text">
Vous avez maintenant accès à l'estimation la plus précise possible.
</Trans>
)}

View File

@ -195,6 +195,9 @@ export let translateAll = (translations, flatRules) => {
let translationsOf = rule => translations[rule.dottedName],
translateProp = (lang, translation) => (rule, prop) => {
let propTrans = translation[prop + '.' + lang]
if (typeof propTrans === 'string') {
propTrans.replace(/^\[automatic\] /, '')
}
if (prop === 'suggestions' && propTrans)
return assoc(
'suggestions',
@ -251,7 +254,7 @@ export let findParentDependencies = (rules, rule) => {
reject(isNil),
filter(
//Find the first "calculable" parent
({ question, unit, formule, dottedName }) =>
({ question, unit, formule }) =>
(question && !unit && !formule) ||
(question && formule?.['une possibilité'] !== undefined) ||
(typeof formule === 'string' && formule.includes(' = ')) ||

View File

@ -112,7 +112,7 @@ export let inferUnit = (
return undefined
}
export let removeOnce = <Trans>(
export let removeOnce = <T>(
element: T,
eqFn: (a: T, b: T) => boolean = equals
) => (list: Array<T>): Array<T> => {

1
source/locales/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
static-analysis-fr.json

File diff suppressed because it is too large Load Diff

View File

@ -4426,7 +4426,7 @@ dirigeant . auto-entrepreneur . cotisations et contributions . TFC . métiers:
- sinon: 0.48%
dirigeant . auto-entrepreneur . cotisations et contributions . contribution formation professionnelle:
titre: Contribution à la formation professionnelleyay
titre: Contribution à la formation professionnelle
unité par défaut: €/mois
références:
shine.fr: https://www.shine.fr/blog/formation-professionnelle-auto-entrepreneur/

View File

@ -3363,8 +3363,8 @@ dirigeant . auto-entrepreneur . cotisations et contributions . TFC . métiers:
titre.en: Chamber of Crafts taxes
titre.fr: taxe pour frais de chambre des métiers
dirigeant . auto-entrepreneur . cotisations et contributions . contribution formation professionnelle:
titre.fr: Contribution à la formation professionnelleyay
titre.en: Contribution to vocational trainingyay
titre.fr: Contribution à la formation professionnelle
dirigeant . auto-entrepreneur . cotisations et contributions . cotisations:
description.en: >
Social security contributions give the self-employed entrepreneur access to
@ -4444,32 +4444,32 @@ artiste-auteur . revenus:
artiste-auteur . revenus . traitements et salaires:
titre.en: Income in wages and salaries
titre.fr: Revenu en traitements et salaires
résumé.fr: Le montant hors TVA de vos droits d'auteur (recettes précomptées)
résumé.en: The amount excluding VAT of your royalties (pre-deducted revenue)
résumé.fr: Le montant hors TVA de vos droits d'auteur (recettes précomptées)
artiste-auteur . revenus . BNC:
titre.en: BNC
titre.fr: BNC
artiste-auteur . revenus . BNC . micro-bnc:
titre.fr: Souhaitez-vous opter pour le régime micro-BNC ?
résumé.fr: Abattement forfaitaire fiscal de 34 % au titre des frais professionnels
titre.en: Would you like to opt for the micro-BNC diet?
titre.fr: Souhaitez-vous opter pour le régime micro-BNC ?
résumé.en: 34% flat-rate tax allowance for business expenses
résumé.fr: Abattement forfaitaire fiscal de 34 % au titre des frais professionnels
artiste-auteur . revenus . BNC . recettes:
titre.en: Income in NBC
titre.fr: Revenu en BNC
résumé.fr: Le montant de vos recettes brutes hors TVA
résumé.en: The amount of your gross revenue excluding VAT
résumé.fr: Le montant de vos recettes brutes hors TVA
artiste-auteur . revenus . BNC . frais réels:
question.en: NBC actual cost regime
question.fr: Régime des frais réels BNC
résumé.en: >-
Amount of your expenses (business expenses, depreciation, etc.) which will
be charged to your income in order to establish your profits or deficits.
résumé.fr: >-
Montant de vos dépenses (frais professionnels, amortissements…) qui seront
imputés à vos recettes afin détablir vos bénéfices ou déficits
titre.en: real costs
titre.fr: frais réels
question.en: NBC actual cost regime
résumé.en: >-
Amount of your expenses (business expenses, depreciation, etc.) which will
be charged to your income in order to establish your profits or deficits.
artiste-auteur . revenus . BNC . charges forfaitaires:
titre.en: fixed expenses
titre.fr: charges forfaitaires

View File

@ -1,45 +0,0 @@
require('dotenv').config()
var { safeDump } = require('js-yaml')
var fs = require('fs')
var querystring = require('querystring')
require('isomorphic-fetch')
const {
getMissingTranslations,
externalizationPath
} = require('./get-missing-translations')
const [missingTranslations, resolved] = getMissingTranslations()
fs.writeFileSync(externalizationPath, safeDump(resolved))
const translateWithDeepl = async text => {
const response = await fetch(
`https://api.deepl.com/v2/translate?${querystring.stringify({
text,
auth_key: process.env.DEEPL_API_SECRET,
source_lang: 'FR',
target_lang: 'EN'
})}`
)
const { translations } = await response.json()
return translations[0].text
}
missingTranslations.length &&
console.log(
`Fetch translation for: \n${missingTranslations
.map(([dottedName, attr]) => `\t- ${dottedName} [${attr}]\n`)
.join('')}`
)
missingTranslations.forEach(async ([dottedName, attr, value]) => {
try {
const translation = await translateWithDeepl(value)
resolved[dottedName][attr] = translation
// C'est très bourrin, mais on ne veut pas perdre une traduction qu'on a payé
fs.writeFileSync(externalizationPath, safeDump(resolved))
} catch (e) {
console.log(e)
}
})

View File

@ -1,75 +0,0 @@
var fs = require('fs')
var path = require('path')
let R = require('ramda')
let { safeLoad } = require('js-yaml')
let externalizationPath = 'source/règles/externalized.yaml'
let rules = safeLoad(
fs.readFileSync(path.resolve('source/règles/base.yaml'), 'utf-8')
)
let currentExternalization = safeLoad(
fs.readFileSync(path.resolve(externalizationPath), 'utf-8')
)
let attributesToExternalize = [
'titre',
'description',
'question',
'résumé',
'suggestions',
'contrôles'
]
function getMissingTranslations() {
let missingTranslations = []
let resolved = Object.entries(rules)
.map(([dottedName, rule]) => [
dottedName,
!rule || !rule.titre
? { ...rule, titre: dottedName.split(' . ').slice(-1)[0] }
: rule
])
.map(([dottedName, rule]) => ({
[dottedName]: R.mergeAll(
R.toPairs(rule)
.filter(([, v]) => !!v)
.map(([k, v]) => {
let attrToTranslate = attributesToExternalize.find(R.equals(k))
if (!attrToTranslate) return {}
let enTrad = attrToTranslate + '.en',
frTrad = attrToTranslate + '.fr'
let currentTranslation = currentExternalization[dottedName]
// Check if a human traduction exists already for this attribute and if
// it does need to be updated
if (
currentTranslation &&
currentTranslation[enTrad] &&
currentTranslation[frTrad] === v
)
return {
[enTrad]: currentTranslation[enTrad],
[frTrad]: v
}
if (['contrôles', 'suggestions'].includes(attrToTranslate)) {
return {
[frTrad]: v
}
}
missingTranslations.push([dottedName, enTrad, v])
return {
[frTrad]: v
}
})
)
}))
resolved = R.mergeAll(resolved)
return [missingTranslations, resolved]
}
module.exports = {
getMissingTranslations,
externalizationPath
}

View File

@ -0,0 +1,12 @@
const { getUiMissingTranslations } = require('./utils')
const missingTranslationKeys = Object.keys(getUiMissingTranslations())
if (missingTranslationKeys.length) {
throw new Error(`Il manque des traductions UI pour les clés suivantes : ${[
'',
...missingTranslationKeys
].join('\n\t- ')}
Utilisez la commande suivante pour traduire automatiquement les clés manquantes :
\tyarn run i18n:ui:translate
`)
}

View File

@ -1,6 +1,6 @@
const { getMissingTranslations } = require('./get-missing-translations')
const { getRulesMissingTranslations } = require('./utils')
const missingTranslations = getMissingTranslations()[0]
const missingTranslations = getRulesMissingTranslations()[0]
if (missingTranslations.length) {
throw new Error(
@ -8,6 +8,6 @@ if (missingTranslations.length) {
.map(([dottedName, attr]) => `\t- ${dottedName} [${attr}]\n`)
.join(
''
)}\nUtilisez la commande suivante pour traduire automatiquement les clés manquantes :\n\n\tyarn run i18n:translate-rules\n`
)}\nUtilisez la commande suivante pour traduire automatiquement les clés manquantes :\n\n\tyarn run i18n:rules:translate\n`
)
}

View File

@ -0,0 +1,23 @@
var { safeDump } = require('js-yaml')
var fs = require('fs')
const {
getRulesMissingTranslations,
rulesTranslationPath,
fetchTranslation
} = require('./utils')
const [missingTranslations, resolved] = getRulesMissingTranslations()
fs.writeFileSync(rulesTranslationPath, safeDump(resolved))
missingTranslations.forEach(async ([dottedName, attr, value]) => {
try {
const translation = await fetchTranslation(value)
resolved[dottedName][attr] = '[automatic] ' + translation
// C'est très bourrin, mais on ne veut pas perdre une traduction qu'on a payé
fs.writeFileSync(rulesTranslationPath, safeDump(resolved))
} catch (e) {
console.log(e)
}
})

View File

@ -0,0 +1,28 @@
var { safeDump, safeLoad } = require('js-yaml')
var R = require('ramda')
var fs = require('fs')
const {
getUiMissingTranslations,
UiTranslationPath,
fetchTranslation
} = require('./utils')
const missingTranslations = getUiMissingTranslations()
let translatedKeys = safeLoad(fs.readFileSync(UiTranslationPath, 'utf-8'))
Object.entries(missingTranslations)
.map(([key, value]) => [key, value === 'NO_TRANSLATION' ? key : value])
.forEach(async ([key, value]) => {
try {
const translation = await fetchTranslation(value)
translatedKeys = R.assocPath(
key.split(/(?<=[A-zÀ-ü0-9])\.(?=[A-zÀ-ü0-9])/),
translation,
translatedKeys
)
fs.writeFileSync(UiTranslationPath, safeDump(translatedKeys))
} catch (e) {
console.log(e)
}
})

View File

@ -0,0 +1,111 @@
require('dotenv').config()
require('isomorphic-fetch')
var fs = require('fs')
var path = require('path')
let R = require('ramda')
var querystring = require('querystring')
let { safeLoad } = require('js-yaml')
let rulesTranslationPath = path.resolve('source/règles/externalized.yaml')
let UiTranslationPath = path.resolve('source/locales/en.yaml')
function getRulesMissingTranslations() {
let rules = safeLoad(
fs.readFileSync(path.resolve('source/règles/base.yaml'), 'utf-8')
)
let currentExternalization = safeLoad(
fs.readFileSync(rulesTranslationPath, 'utf-8')
)
let attributesToExternalize = [
'titre',
'description',
'question',
'résumé',
'suggestions',
'contrôles'
]
let missingTranslations = []
let resolved = Object.entries(rules)
.map(([dottedName, rule]) => [
dottedName,
!rule || !rule.titre
? { ...rule, titre: dottedName.split(' . ').slice(-1)[0] }
: rule
])
.map(([dottedName, rule]) => ({
[dottedName]: R.mergeAll(
R.toPairs(rule)
.filter(([, v]) => !!v)
.map(([k, v]) => {
let attrToTranslate = attributesToExternalize.find(R.equals(k))
if (!attrToTranslate) return {}
let enTrad = attrToTranslate + '.en',
frTrad = attrToTranslate + '.fr'
let currentTranslation = currentExternalization[dottedName]
// Check if a human traduction exists already for this attribute and if
// it does need to be updated
if (
currentTranslation &&
currentTranslation[enTrad] &&
currentTranslation[frTrad] === v
)
return {
[enTrad]: currentTranslation[enTrad],
[frTrad]: v
}
if (['contrôles', 'suggestions'].includes(attrToTranslate)) {
return {
[frTrad]: v
}
}
missingTranslations.push([dottedName, enTrad, v])
return {
[frTrad]: v
}
})
)
}))
resolved = R.mergeAll(resolved)
return [missingTranslations, resolved]
}
const getUiMissingTranslations = () => {
const staticKeys = require(path.resolve(
'source/locales/static-analysis-fr.json'
))
const translatedKeys = safeLoad(fs.readFileSync(UiTranslationPath, 'utf-8'))
const missingTranslations = Object.keys(staticKeys).filter(key => {
if (key.match(/^\{.*\}$/)) {
return false
}
const keys = key.split(/(?<=[A-zÀ-ü0-9])\.(?=[A-zÀ-ü0-9])/)
return !R.path(keys, translatedKeys)
}, staticKeys)
return R.pick(missingTranslations, staticKeys)
}
const fetchTranslation = async text => {
console.log(`Fetch translation for:\n\t${text}`)
const response = await fetch(
`https://api.deepl.com/v2/translate?${querystring.stringify({
text,
auth_key: process.env.DEEPL_API_SECRET,
tag_handling: 'xml',
source_lang: 'FR',
target_lang: 'EN'
})}`
)
const { translations } = await response.json()
return translations[0].text
}
module.exports = {
fetchTranslation,
getRulesMissingTranslations,
getUiMissingTranslations,
rulesTranslationPath,
UiTranslationPath
}

View File

@ -31,7 +31,7 @@ export default function Privacy() {
export let PrivacyContent = ({ language }: { language: string }) => (
<>
<Trans key="privacyContent">
<Trans i18nKey="privacyContent">
<h1>Vie privée</h1>
<p>
Nous recueillons des statistiques anonymes sur l'utilisation du site,

View File

@ -30,10 +30,10 @@ export default function AfterRegistration() {
</NavLink>
</div>
<h1>
<Trans key="après.titre">Après la création</Trans>
<Trans i18nKey="après.titre">Après la création</Trans>
</h1>
<p>
<Trans key="après.intro">
<Trans i18nKey="après.intro">
Une fois votre{' '}
{{
statutChoisi: isAutoentrepreneur
@ -44,10 +44,10 @@ export default function AfterRegistration() {
</Trans>
</p>
<h2>
<Trans key="après.siret.titre">Le numéro SIRET</Trans>
<Trans i18nKey="après.siret.titre">Le numéro SIRET</Trans>
</h2>
<p>
<Trans key="après.siret.description">
<Trans i18nKey="après.siret.description">
Le numéro SIREN <strong>est l'identifiant de votre entreprise</strong>{' '}
tandis que le numéro SIRET identifie chaque établissement de la même
entreprise. Le SIRET commence par le SIREN, auquel on ajoute le numéro
@ -61,10 +61,10 @@ export default function AfterRegistration() {
/>
</p>
<h2>
<Trans key="après.ape.titre">Le code APE</Trans>
<Trans i18nKey="après.ape.titre">Le code APE</Trans>
</h2>
<p>
<Trans key="après.ape.description">
<Trans i18nKey="après.ape.description">
Le code APE correspond au <strong>secteur d'activité</strong> de votre
entreprise. Il classifie la branche principale de votre entreprise
dans la nomenclature nationale d'activités françaises « NAF » (
@ -95,10 +95,10 @@ export default function AfterRegistration() {
{statutChoisi && !statutChoisi.includes('auto-entrepreneur') && (
<>
<h2>
<Trans key="après.kbis.titre">Le Kbis</Trans>
<Trans i18nKey="après.kbis.titre">Le Kbis</Trans>
</h2>
<p>
<Trans key="après.kbis.description.1">
<Trans i18nKey="après.kbis.description.1">
C'est le document officiel qui atteste de{' '}
<strong>l'existence légale d'une entreprise commerciale</strong>.
Le plus souvent, pour être valable par les procédures
@ -109,7 +109,7 @@ export default function AfterRegistration() {
</Trans>
</p>
<p>
<Trans key="après.kbis.description.2">
<Trans i18nKey="après.kbis.description.2">
Ce document est généralement demandé lors de la candidature à un
appel d'offre public, de l'ouverture d'un compte bancaire,
d'achats d'équipement professionnel auprès de fournisseurs, etc.

View File

@ -77,7 +77,7 @@ function CreateCompany({
onClick={onStatusChange}
className="ui__ simple small push-left button"
>
<Trans key="entreprise.retour"> Choisir un autre statut</Trans>
<Trans i18nKey="entreprise.retour"> Choisir un autre statut</Trans>
</button>
</div>
@ -88,12 +88,12 @@ function CreateCompany({
<h2>
{emoji('📋')}{' '}
<Trans key="entreprise.tâches.titre">
<Trans i18nKey="entreprise.tâches.titre">
À faire pour créer votre entreprise
</Trans>
</h2>
<p className="ui__ notice">
<Trans key="entreprise.tâches.avancement">
<Trans i18nKey="entreprise.tâches.avancement">
Utilisez cette liste pour suivre votre avancement dans les démarches.
Votre progression est automatiquement sauvegardée dans votre
navigateur.
@ -109,7 +109,7 @@ function CreateCompany({
name="legalStatus"
defaultChecked={true}
title={
<Trans key="entreprise.tâches.formeJuridique.titre">
<Trans i18nKey="entreprise.tâches.formeJuridique.titre">
Choisir la forme juridique
</Trans>
}
@ -118,12 +118,12 @@ function CreateCompany({
<CheckItem
name="corporateName"
title={
<Trans key="entreprise.tâches.nom.titre">
<Trans i18nKey="entreprise.tâches.nom.titre">
Trouver un nom d'entreprise
</Trans>
}
explanations={
<Trans key="entreprise.tâches.nom.description">
<Trans i18nKey="entreprise.tâches.nom.description">
<p>
<strong>La dénomination sociale</strong> est le nom de votre
entreprise aux yeux de la loi, écrit sur tous vos documents
@ -145,13 +145,13 @@ function CreateCompany({
<CheckItem
name="corporatePurpose"
title={
<Trans key="entreprise.tâches.objetSocial.titre">
<Trans i18nKey="entreprise.tâches.objetSocial.titre">
Déterminer l'objet social
</Trans>
}
explanations={
<p>
<Trans key="entreprise.tâches.objetSocial.description">
<Trans i18nKey="entreprise.tâches.objetSocial.description">
L'
<strong>objet social</strong> est l'activité principale de
l'entreprise. Une activité secondaire peut être enregistrée.
@ -163,12 +163,12 @@ function CreateCompany({
<CheckItem
name="companyAddress"
title={
<Trans key="entreprise.tâches.adresse.titre">
<Trans i18nKey="entreprise.tâches.adresse.titre">
Choisir une adresse pour le siège
</Trans>
}
explanations={
<Trans key="entreprise.tâches.adresse.description">
<Trans i18nKey="entreprise.tâches.adresse.description">
<p>
<strong>L'adresse</strong> est l'espace physique où votre
entreprise sera incorporée. Dans certains lieux et certaines
@ -186,13 +186,13 @@ function CreateCompany({
<CheckItem
name="statut"
title={
<Trans key="entreprise.tâches.statuts.titre">
<Trans i18nKey="entreprise.tâches.statuts.titre">
Écrire les statuts
</Trans>
}
explanations={
<p>
<Trans key="entreprise.tâches.statuts.description">
<Trans i18nKey="entreprise.tâches.statuts.description">
Il s'agit d'un document officiel qui intègre la forme
juridique, nomme les associés et leurs contributions au
capital.{' '}
@ -216,29 +216,29 @@ function CreateCompany({
<CheckItem
name="openBankAccount"
title={
<Trans key="entreprise.tâches.banque.titre">
<Trans i18nKey="entreprise.tâches.banque.titre">
Ouvrir un compte bancaire
</Trans>
}
explanations={
<>
<p>
<Trans key="entreprise.tâches.banque.description.1">
<Trans i18nKey="entreprise.tâches.banque.description.1">
Le but d'un <strong>compte bancaire d'entreprise</strong> est
de séparer les actifs de l'entreprise des vôtres.
</Trans>{' '}
{statut === 'EI' && (
<Trans key="entreprise.tâches.banque.description.EI">
<Trans i18nKey="entreprise.tâches.banque.description.EI">
Si son ouverture n'est pas obligatoire pour un IE, elle
reste fortement recommandée.{' '}
</Trans>
)}
<Trans key="entreprise.tâches.banque.description.2">
<Trans i18nKey="entreprise.tâches.banque.description.2">
Le compte d'entreprise vous permet de :
</Trans>
</p>
<ul>
<Trans key="entreprise.tâches.banque.description.liste">
<Trans i18nKey="entreprise.tâches.banque.description.liste">
<li>
Différencier vos opérations privées et professionnelles
</li>
@ -252,12 +252,12 @@ function CreateCompany({
<CheckItem
name="fundsDeposit"
title={
<Trans key="entreprise.tâches.capital.titre">
<Trans i18nKey="entreprise.tâches.capital.titre">
Déposer le capital
</Trans>
}
explanations={
<Trans key="entreprise.tâches.capital.description">
<Trans i18nKey="entreprise.tâches.capital.description">
<p>
Le <strong>dépôt du capital social</strong> doit être fait au
moment de la constitution d'une société par une personne
@ -282,12 +282,12 @@ function CreateCompany({
<CheckItem
name="declarationOfAssignement"
title={
<Trans key="entreprise.tâches.affectation.titre">
<Trans i18nKey="entreprise.tâches.affectation.titre">
Effectuer une déclaration d'affectation de patrimoine
</Trans>
}
explanations={
<Trans key="entreprise.tâches.affectation.description">
<Trans i18nKey="entreprise.tâches.affectation.description">
<p>
La <strong>déclaration d'affectation du patrimoine</strong>{' '}
permet de séparer le patrimoine professionnel de votre
@ -316,13 +316,13 @@ function CreateCompany({
{!isEI && (
<CheckItem
title={
<Trans key="entreprise.tâches.journal.titre">
<Trans i18nKey="entreprise.tâches.journal.titre">
Publier une annonce de création dans un journal
</Trans>
}
name="publishCreationNotice"
explanations={
<Trans key="entreprise.tâches.journal.description">
<Trans i18nKey="entreprise.tâches.journal.description">
<p>
Vous devez publier la création de votre entreprise dans un
journal d'annonces légales (« JAL »), pour un coût de
@ -360,12 +360,12 @@ function CreateCompany({
<CheckItem
name="registerCompanyOnline"
title={
<Trans key="entreprise.tâches.formulaire.titre">
<Trans i18nKey="entreprise.tâches.formulaire.titre">
Créer mon entreprise en ligne
</Trans>
}
explanations={
<Trans key="entreprise.tâches.formulaire.description">
<Trans i18nKey="entreprise.tâches.formulaire.description">
<p>
Vous pouvez faire votre inscription en ligne à tout moment,
l'enregistrer et y revenir comme vous le souhaitez.
@ -389,7 +389,7 @@ function CreateCompany({
</Checklist>
<h2>
{emoji('💭')}{' '}
<Trans key="entreprise.tâches.titre2">
<Trans i18nKey="entreprise.tâches.titre2">
Recommandé avant le début de l'activité
</Trans>
</h2>
@ -399,13 +399,13 @@ function CreateCompany({
<CheckItem
name="chooseCertifiedAccountant"
title={
<Trans key="entreprise.tâches.comptable.titre">
<Trans i18nKey="entreprise.tâches.comptable.titre">
Choisir un comptable
</Trans>
}
explanations={
<p>
<Trans key="entreprise.tâches.comptable.description">
<Trans i18nKey="entreprise.tâches.comptable.description">
La gestion d'une entreprise impose un certain nombre d'
<a href="https://www.economie.gouv.fr/entreprises/obligations-comptables">
obligations comptables
@ -420,12 +420,12 @@ function CreateCompany({
<CheckItem
name="checkoutProfessionalAssuranceNeeds"
title={
<Trans key="entreprise.tâches.assurance.titre">
<Trans i18nKey="entreprise.tâches.assurance.titre">
Juger de la nécessité de prendre une assurance
</Trans>
}
explanations={
<Trans key="entreprise.tâches.assurance.description">
<Trans i18nKey="entreprise.tâches.assurance.description">
<p>
Une PME ou un travailleur indépendant doit se protéger contre
les principaux risques auxquels il est exposé et souscrire des
@ -463,7 +463,7 @@ function CreateCompany({
state: { fromCréer: true }
}}
>
<Trans key="entreprise.ressources.simu.autoEntrepreneur">
<Trans i18nKey="entreprise.ressources.simu.autoEntrepreneur">
<p>Simulateur de revenus auto-entrepreneur</p>
<small>
Simuler le montant de vos cotisations sociales et de votre impôt
@ -480,7 +480,7 @@ function CreateCompany({
state: { fromCréer: true }
}}
>
<Trans key="entreprise.ressources.simu.indépendant">
<Trans i18nKey="entreprise.ressources.simu.indépendant">
<p>Simulateur de cotisations indépendant</p>
<small>
Simuler le montant de vos cotisations sociales pour bien
@ -497,7 +497,7 @@ function CreateCompany({
state: { fromCréer: true }
}}
>
<Trans key="entreprise.ressources.simu.assimilé">
<Trans i18nKey="entreprise.ressources.simu.assimilé">
<p>Simulateur de cotisations assimilé-salarié</p>
<small>
Simuler le montant de vos cotisations sociales pour bien
@ -510,7 +510,7 @@ function CreateCompany({
className="ui__ interactive card button-choice lighter-bg"
to={sitePaths.créer.après}
>
<Trans key="entreprise.ressources.après">
<Trans i18nKey="entreprise.ressources.après">
<p>Après la création</p>
<small>
SIREN, SIRET, code APE, KBis. Un petit glossaire des termes que
@ -557,7 +557,7 @@ let StatutsExample = ({ statut }) => {
return (
<a target="_blank" href={links[statut]}>
<Trans key="entreprise.tâches.statuts.exemple">
<Trans i18nKey="entreprise.tâches.statuts.exemple">
Exemple de statuts pour votre
</Trans>{' '}
{statut}

View File

@ -18,11 +18,11 @@ export default function Autoentrepreneur() {
/>
</Helmet>
<h2>
<Trans key="autoentrepreneur.titre">
<Trans i18nKey="autoentrepreneur.titre">
Entreprise individuelle ou auto-entrepreneur
</Trans>
</h2>
<Trans key="autoentrepreneur.description">
<Trans i18nKey="autoentrepreneur.description">
<p>
À la différence de l'entreprise individuelle, l'auto-entrepreneur
bénéficie d'un régime simplifié de déclaration et de paiement : les

View File

@ -20,11 +20,11 @@ export default function DefineDirectorStatus() {
/>
</Helmet>
<h2>
<Trans key="statut du dirigeant.titre">
<Trans i18nKey="statut du dirigeant.titre">
Définir le statut du dirigeant
</Trans>
</h2>
<Trans key="statut du dirigeant.description">
<Trans i18nKey="statut du dirigeant.description">
<p>
Ce choix est important car il détermine le régime de sécurité sociale
et la couverture sociale du dirigeant. Le montant et les modalités de

View File

@ -25,11 +25,11 @@ export default function MinorityDirector() {
/>
</Helmet>
<h2>
<Trans key="gérant minoritaire.titre">
<Trans i18nKey="gérant minoritaire.titre">
Gérant majoritaire ou minoritaire
</Trans>{' '}
</h2>
<Trans key="gérant minoritaire.description">
<Trans i18nKey="gérant minoritaire.description">
<p>
Certaines règles spéciales s'appliquent selon le nombre d'actions
détenues.

View File

@ -24,9 +24,9 @@ const NumberOfAssociates = ({ companyHasMultipleAssociates }) => {
/>
</Helmet>
<h2>
<Trans key="associés.titre">Seul ou à plusieurs</Trans>
<Trans i18nKey="associés.titre">Seul ou à plusieurs</Trans>
</h2>
<Trans key="associés.description">
<Trans i18nKey="associés.description">
<p>
Une entreprise avec un seul associé est plus simple à créer et gérer.
Un associé peut-être une personne physique (un individu) ou une
@ -46,7 +46,7 @@ const NumberOfAssociates = ({ companyHasMultipleAssociates }) => {
}}
className="ui__ button"
>
<Trans key="associés.choix1">Seul</Trans>
<Trans i18nKey="associés.choix1">Seul</Trans>
</button>
<button
onClick={() => {
@ -54,7 +54,7 @@ const NumberOfAssociates = ({ companyHasMultipleAssociates }) => {
}}
className="ui__ button"
>
<Trans key="associés.choix2">Plusieurs personnes</Trans>
<Trans i18nKey="associés.choix2">Plusieurs personnes</Trans>
</button>
</div>
</>

View File

@ -99,7 +99,7 @@ export default function SetMainStatus() {
</Helmet>
<h2>
{Object.keys(possibleStatus).every(Boolean) ? (
<Trans> Liste des statuts juridiques </Trans>
<Trans>Liste des statuts juridiques</Trans>
) : (
<Trans>Votre forme juridique</Trans>
)}

View File

@ -20,9 +20,9 @@ const requirementToText = (
)
case 'soleProprietorship':
return value ? (
<Trans key="responsabilité.bouton2">Entreprise individuelle</Trans>
<Trans i18nKey="responsabilité.bouton2">Entreprise individuelle</Trans>
) : (
<Trans key="responsabilité.bouton1">Société</Trans>
<Trans i18nKey="responsabilité.bouton1">Société</Trans>
)
case 'directorStatus':
return value === 'SELF_EMPLOYED' ? (

View File

@ -30,12 +30,12 @@ const SoleProprietorship = ({ isSoleProprietorship }) => {
/>
</Helmet>
<h2>
<Trans key="responsabilité.titre">
<Trans i18nKey="responsabilité.titre">
Entreprise individuelle ou société ?
</Trans>
</h2>
<p>
<Trans key="responsabilité.intro">
<Trans i18nKey="responsabilité.intro">
Ce choix determine votre degré de responsabilité et votre capacité à
accueillir de nouveaux associés dans le futur{' '}
</Trans>
@ -43,7 +43,7 @@ const SoleProprietorship = ({ isSoleProprietorship }) => {
</p>
<ul>
<li>
<Trans key="responsabilité.entreprise-individuelle">
<Trans i18nKey="responsabilité.entreprise-individuelle">
<strong>Entreprise individuelle : </strong>
Une activité économique exercée par une seule personne physique, en
son nom propre. Moins de formalités, mais plus de risques en cas de
@ -57,7 +57,7 @@ const SoleProprietorship = ({ isSoleProprietorship }) => {
</li>
<li>
<Trans key="responsabilité.société">
<Trans i18nKey="responsabilité.société">
<strong>Société : </strong>
Vous ne pouvez pas être tenu personnellement responsable des dettes
ou obligations de la société. En revanche, les démarches de création
@ -73,7 +73,9 @@ const SoleProprietorship = ({ isSoleProprietorship }) => {
}}
className="ui__ button"
>
<Trans key="responsabilité.bouton2">Entreprise individuelle</Trans>
<Trans i18nKey="responsabilité.bouton2">
Entreprise individuelle
</Trans>
</button>
<button
onClick={() => {
@ -81,7 +83,7 @@ const SoleProprietorship = ({ isSoleProprietorship }) => {
}}
className="ui__ button"
>
<Trans key="responsabilité.bouton1">Société</Trans>
<Trans i18nKey="responsabilité.bouton1">Société</Trans>
</button>
</div>
{/* this is an economic activity conducted by a single natural person, in his own name ; */}

View File

@ -46,7 +46,7 @@ export default function Créer() {
</NavLink>
</div>
<h1>
<Trans key="formeJuridique.titre">Choix du statut juridique</Trans>
<Trans i18nKey="formeJuridique.titre">Choix du statut juridique</Trans>
</h1>
<PreviousAnswers />
<Animate.fromBottom key={location.pathname}>

View File

@ -26,12 +26,12 @@ export default function Créer() {
</Helmet>
<h1>
<Trans key="créer.titre">Créer une entreprise</Trans>
<Trans i18nKey="créer.titre">Créer une entreprise</Trans>
</h1>
<div css="display: flex; align-items: flex-start; justify-content: space-between">
<div>
<p className="ui__ lead">
<Trans key="créer.description">
<Trans i18nKey="créer.description">
Avant d'entamer les démarches administratives pour créer votre
entreprise, vous devez choisir un statut juridique adapté à votre
activité
@ -50,7 +50,7 @@ export default function Créer() {
: t('créer.cta.continue', 'Continuer le guide')}
</Link>
<p className="ui__ notice">
<Trans key="créer.warningPL">
<Trans i18nKey="créer.warningPL">
Le cas des professions libérales réglementées n'est pas encore
traité
</Trans>
@ -80,8 +80,8 @@ export default function Créer() {
className="ui__ interactive card button-choice lighter-bg"
to={sitePaths.créer.guideStatut.liste}
>
<Trans key="créer.ressources.listeStatuts">
<p>Liste des statuts juridiques </p>
<Trans i18nKey="créer.ressources.listeStatuts">
<p>Liste des statuts juridiques</p>
<small>
Vous savez déjà quel statut choisir ? Accédez directement à la
liste des démarches associées
@ -95,7 +95,7 @@ export default function Créer() {
state: { fromCréer: true }
}}
>
<Trans key="créer.ressources.comparaison">
<Trans i18nKey="créer.ressources.comparaison">
<p>Comparateur de régimes</p>
<small>
Indépendant, assimilé-salarié ou auto-entrepreneur ? Calculez les
@ -108,7 +108,7 @@ export default function Créer() {
className="ui__ interactive card button-choice lighter-bg"
to={sitePaths.créer['auto-entrepreneur']}
>
<Trans key="créer.ressources.autoEntrepreneur">
<Trans i18nKey="créer.ressources.autoEntrepreneur">
<p>Démarche auto-entrepreneur</p>
<small>
Vous souhaitez devenir auto-entrepreneur ? Découvrez les étapes

View File

@ -7,12 +7,12 @@ type Props = {
const StatutDescription = ({ statut }: Props) =>
statut === 'EI' ? (
<Trans key="formeJuridique.EI">
<Trans i18nKey="formeJuridique.EI">
Aucun apport en capital n'est nécessaire. Le capital privé et le capital
de l'entreprise ne font qu'un.
</Trans>
) : statut === 'EIRL' ? (
<Trans key="formeJuridique.EIRL">
<Trans i18nKey="formeJuridique.EIRL">
Permet de protéger son patrimoine personnel en attribuant un capital
spécifique à son activité professionnelle. La société et l'individu
constituent la même personne. Ne convient pas si l'associé unique est une
@ -20,13 +20,13 @@ const StatutDescription = ({ statut }: Props) =>
associés au cours de votre développement (choisissez EURL dans ce cas).
</Trans>
) : statut === 'EURL' ? (
<Trans key="formeJuridique.EURL">
<Trans i18nKey="formeJuridique.EURL">
L'entreprise n'a qu'un associé. La responsabilité est limitée au montant
de l'apport de capital. Evolue en SARL lors de l'arrivée de nouveaux
associés dans la société.
</Trans>
) : statut.includes('SARL') ? (
<Trans key="formeJuridique.SARL">
<Trans i18nKey="formeJuridique.SARL">
Société ayant au moins deux associés dont la responsabilité financière est
limitée au montant de leur apport au capital. Le capital minimum est fixé
librement dans les statuts. Les associés se répartissent des parts
@ -35,7 +35,7 @@ const StatutDescription = ({ statut }: Props) =>
d'une SARL est encadré par le code du commerce.
</Trans>
) : statut === 'SAS' ? (
<Trans key="formeJuridique.SAS">
<Trans i18nKey="formeJuridique.SAS">
Société ayant au moins deux associés. La responsabilité financière des
associés est limitée au montant de leur apport au capital de la société.
Le capital minimum est fixé librement dans les statuts. Les associés se
@ -45,31 +45,31 @@ const StatutDescription = ({ statut }: Props) =>
fonctionnement (statuts sur mesure).
</Trans>
) : statut === 'SASU' ? (
<Trans key="formeJuridique.SASU">
<Trans i18nKey="formeJuridique.SASU">
L'entreprise n'a qu'un associé. La responsabilité est limitée au montant
de l'apport de capital de l'unique associé (qui peut être une personne
morale).
</Trans>
) : statut === 'SA' ? (
<Trans key="formeJuridique.SA">
<Trans i18nKey="formeJuridique.SA">
Société ayant au moins deux actionnaires. C'est le seul statut qui permet
d'être coté en bourse (à partir de 7 actionnaires). Le capital social
minimum est de 37.000 .
</Trans>
) : (statut as string) === 'SNC' ? (
<Trans key="formeJuridique.SNC">
<Trans i18nKey="formeJuridique.SNC">
La responsabilité des associés pour les dettes de la société est solidaire
(un seul associé peut être poursuivi pour la totalité de la dette) et
indéfinie (responsable sur la totalité de son patrimoine personnel).
</Trans>
) : statut === 'auto-entrepreneur' ? (
<Trans key="formeJuridique.micro">
<Trans i18nKey="formeJuridique.micro">
Un auto-entrepreneur exerce son activité en entreprise individuelle, avec
un régime forfaitaire pour ses cotisations sociales et un calcul
spécifique de l'impôt.
</Trans>
) : statut === 'auto-entrepreneur-EIRL' ? (
<Trans key="formeJuridique.micro-EIRL">
<Trans i18nKey="formeJuridique.micro-EIRL">
Un auto-entrepreneur option EIRL exerce son activité en entreprise
individuelle en choisissant l'option "Entrepreneur individuel à
responsabilité limitée", avec à un régime forfaitaire pour le calcul des

View File

@ -35,10 +35,12 @@ function Embaucher({ onChecklistInitialization, onItemCheck }: EmbaucherProps) {
/>
</Helmet>
<h1>
<Trans key="embauche.tâches.titre">Les formalités pour embaucher</Trans>
<Trans i18nKey="embauche.tâches.titre">
Les formalités pour embaucher
</Trans>
</h1>
<p>
<Trans key="embauche.tâches.description">
<Trans i18nKey="embauche.tâches.description">
Toutes les étapes nécessaires à l'embauche de votre premier employé.
</Trans>
</p>
@ -50,7 +52,7 @@ function Embaucher({ onChecklistInitialization, onItemCheck }: EmbaucherProps) {
<CheckItem
name="contract"
title={
<Trans key="embauche.tâches.contrat.titre">
<Trans i18nKey="embauche.tâches.contrat.titre">
Signer un contrat de travail avec votre employé
</Trans>
}
@ -70,13 +72,13 @@ function Embaucher({ onChecklistInitialization, onItemCheck }: EmbaucherProps) {
<CheckItem
name="dpae"
title={
<Trans key="embauche.tâches.dpae.titre">
<Trans i18nKey="embauche.tâches.dpae.titre">
Déclarer l'embauche à l'administration sociale
</Trans>
}
explanations={
<p>
<Trans key="embauche.tâches.dpae.description">
<Trans i18nKey="embauche.tâches.dpae.description">
Ceci peut être fait par le biais du formulaire appelé DPAE, doit
être complété dans les 8 jours avant toute embauche, et peut{' '}
<a href="https://www.due.urssaf.fr" target="_blank">
@ -90,13 +92,13 @@ function Embaucher({ onChecklistInitialization, onItemCheck }: EmbaucherProps) {
<CheckItem
name="paySoftware"
title={
<Trans key="embauche.tâches.logiciel de paie.titre">
<Trans i18nKey="embauche.tâches.logiciel de paie.titre">
Choisir un logiciel de paie
</Trans>
}
explanations={
<p>
<Trans key="embauche.tâches.logiciel de paie.description">
<Trans i18nKey="embauche.tâches.logiciel de paie.description">
Les fiches de paie et les déclarations peuvent être traitées en
ligne gratuitement par le{' '}
<a href="http://www.letese.urssaf.fr" target="_blank">
@ -116,7 +118,7 @@ function Embaucher({ onChecklistInitialization, onItemCheck }: EmbaucherProps) {
<CheckItem
name="registre"
title={
<Trans key="embauche.tâches.registre.titre">
<Trans i18nKey="embauche.tâches.registre.titre">
Tenir un registre des employés à jour
</Trans>
}
@ -135,7 +137,7 @@ function Embaucher({ onChecklistInitialization, onItemCheck }: EmbaucherProps) {
<CheckItem
name="complementaryPension"
title={
<Trans key="embauche.tâches.pension.titre">
<Trans i18nKey="embauche.tâches.pension.titre">
Prendre contact avec l'institution de prévoyance complémentaire
obligatoire qui vous est assignée
</Trans>
@ -147,7 +149,7 @@ function Embaucher({ onChecklistInitialization, onItemCheck }: EmbaucherProps) {
className="ui__ button"
target="_blank"
>
<Trans key="embauche.tâches.pension.description">
<Trans i18nKey="embauche.tâches.pension.description">
Trouver mon institution de prévoyance
</Trans>
</a>
@ -158,13 +160,13 @@ function Embaucher({ onChecklistInitialization, onItemCheck }: EmbaucherProps) {
<CheckItem
name="complementaryHealth"
title={
<Trans key="embauche.tâches.complémentaire santé.titre">
<Trans i18nKey="embauche.tâches.complémentaire santé.titre">
Choisir une complémentaire santé
</Trans>
}
explanations={
<p>
<Trans key="embauche.tâches.complémentaire santé.description">
<Trans i18nKey="embauche.tâches.complémentaire santé.description">
Vous devez couvrir vos salariés avec l'assurance complémentaire
santé privée de votre choix (aussi appelée "mutuelle"), pour
autant qu'elle offre un ensemble de garanties minimales.
@ -176,13 +178,13 @@ function Embaucher({ onChecklistInitialization, onItemCheck }: EmbaucherProps) {
<CheckItem
name="workMedicine"
title={
<Trans key="embauche.tâches.medecine.titre">
<Trans i18nKey="embauche.tâches.medecine.titre">
S'inscrire à un bureau de médecine du travail
</Trans>
}
explanations={
<p>
<Trans key="embauche.tâches.medecine.description">
<Trans i18nKey="embauche.tâches.medecine.description">
N'oubliez pas de planifier un rendez-vous initial pour chaque
nouvelle embauche.{' '}
<a href="https://www.service-public.fr/particuliers/vosdroits/F2211">
@ -193,7 +195,7 @@ function Embaucher({ onChecklistInitialization, onItemCheck }: EmbaucherProps) {
}
/>
</Checklist>
<Trans key="embauche.chaque mois">
<Trans i18nKey="embauche.chaque mois">
<h2>Tous les mois</h2>
<ul>
<li>

View File

@ -59,13 +59,13 @@ export default function SocialSecurity() {
<ScrollToTop />
<Animate.fromBottom>
<h1>
<Trans key="gérer.titre">Gérer mon activité</Trans>
<Trans i18nKey="gérer.titre">Gérer mon activité</Trans>
</h1>
<div css="display: flex; align-items: flex-start; justify-content: space-between">
<div>
{!company && (
<p className="ui__ lead">
<Trans key="gérer.description">
<Trans i18nKey="gérer.description">
Vous souhaitez vous verser un revenu ou embaucher ? <br />
Vous aurez à payer des cotisations et des impôts. <br />
Anticipez leurs montants grâce aux simulateurs adaptés à votre
@ -85,7 +85,9 @@ export default function SocialSecurity() {
<>
<h2>
<Trans key="gérer.choix.titre">Que souhaitez-vous faire ?</Trans>
<Trans i18nKey="gérer.choix.titre">
Que souhaitez-vous faire ?
</Trans>
</h2>
{!!régime && (
<Link
@ -98,7 +100,7 @@ export default function SocialSecurity() {
}
}}
>
<Trans key="gérer.choix.revenus">
<Trans i18nKey="gérer.choix.revenus">
<p>Calculer mon revenu net</p>
<small>
Estimez précisément le montant de vos cotisations grâce au
@ -118,7 +120,7 @@ export default function SocialSecurity() {
}
}}
>
<Trans key="gérer.choix.embauche">
<Trans i18nKey="gérer.choix.embauche">
<p>Estimer le montant dune embauche</p>
<small>
Calculez le montant total que votre entreprise devra dépenser
@ -146,7 +148,7 @@ export default function SocialSecurity() {
className="ui__ interactive card button-choice lighter-bg"
to={sitePaths.gérer.embaucher}
>
<Trans key="gérer.ressources.embaucher">
<Trans i18nKey="gérer.ressources.embaucher">
<p>Découvrir les démarches dembauche </p>
<small>
La liste des choses à faire pour être sûr de ne rien oublier
@ -160,7 +162,7 @@ export default function SocialSecurity() {
className="ui__ interactive card button-choice lighter-bg"
href="https://autoentrepreneur.urssaf.fr"
>
<Trans key="gérer.ressources.autoEntrepreneur">
<Trans i18nKey="gérer.ressources.autoEntrepreneur">
<p>Accéder au site officiel auto-entrepreneur</p>
<small>
Vous pourrez effectuer votre déclaration de chiffre
@ -175,7 +177,7 @@ export default function SocialSecurity() {
className="ui__ interactive card button-choice lighter-bg"
to={sitePaths.gérer.sécuritéSociale}
>
<Trans key="gérer.ressources.sécuritéSociale">
<Trans i18nKey="gérer.ressources.sécuritéSociale">
<p>Comprendre la sécurité sociale </p>
<small>
A quoi servent les cotisations sociales ? Le point sur le
@ -241,7 +243,7 @@ const CompanySection = ({ company }: CompanySectionProps) => {
<ScrollToTop />
<Overlay>
<h2>
<Trans key="gérer.entreprise.auto">
<Trans i18nKey="gérer.entreprise.auto">
Êtes-vous auto-entrepreneur ?{' '}
</Trans>
</h2>
@ -266,7 +268,7 @@ const CompanySection = ({ company }: CompanySectionProps) => {
<>
<ScrollToTop />
<Overlay>
<Trans key="gérer.entreprise.dirigeant">
<Trans i18nKey="gérer.entreprise.dirigeant">
<h2> Êtes-vous dirigeant majoritaire ? </h2>
<p>
Si vous êtes administrateur majoritaire ou si vous faites partie
@ -314,11 +316,11 @@ const CompanySection = ({ company }: CompanySectionProps) => {
{company.isDirigeantMajoritaire != null && (
<span css="margin-left: 1rem" className="ui__ label">
{company.isDirigeantMajoritaire ? (
<Trans key="gérer.entreprise.majoritaire">
<Trans i18nKey="gérer.entreprise.majoritaire">
Dirigeant majoritaire
</Trans>
) : (
<Trans key="gérer.entreprise.minoritaire">
<Trans i18nKey="gérer.entreprise.minoritaire">
Dirigeant minoritaire
</Trans>
)}
@ -334,7 +336,7 @@ const CompanySection = ({ company }: CompanySectionProps) => {
showSearchModal(true)
}}
>
<Trans key="gérer.entreprise.changer">
<Trans i18nKey="gérer.entreprise.changer">
Changer l'entreprise sélectionnée
</Trans>
</button>
@ -345,7 +347,7 @@ const CompanySection = ({ company }: CompanySectionProps) => {
onClick={() => showSearchModal(true)}
className="ui__ plain cta button"
>
<Trans key="gérer.cta">Renseigner mon entreprise</Trans>
<Trans i18nKey="gérer.cta">Renseigner mon entreprise</Trans>
</button>
</p>
)}

View File

@ -15,7 +15,7 @@ export default function SchemeChoice() {
<title>{t('selectionRégime.page.titre', 'Selection du régime')}</title>
</Helmet>
<h1>
<Trans key="selectionRégime.titre">
<Trans i18nKey="selectionRégime.titre">
Quel régime souhaitez-vous explorer ?
</Trans>
</h1>
@ -29,7 +29,7 @@ export default function SchemeChoice() {
<Trans>Assimilé salarié</Trans>
<small>
(
<Trans key="comparaisonRégimes.status.AS">
<Trans i18nKey="comparaisonRégimes.status.AS">
SAS, SASU ou SARL avec gérant minoritaire
</Trans>
)
@ -45,7 +45,7 @@ export default function SchemeChoice() {
<Trans>Indépendant</Trans>
<small>
(
<Trans key="comparaisonRégimes.status.indep.1">
<Trans i18nKey="comparaisonRégimes.status.indep.1">
EI, EIRL, EURL ou SARL avec gérant majoritaire
</Trans>
)
@ -61,7 +61,7 @@ export default function SchemeChoice() {
</Link>
</p>
<h2>
<Trans key="selectionRégime.comparer.titre">
<Trans i18nKey="selectionRégime.comparer.titre">
Vous ne savez pas lequel choisir ?
</Trans>
</h2>
@ -70,7 +70,9 @@ export default function SchemeChoice() {
className="ui__ plain cta button"
to={sitePaths.simulateurs.comparaison}
>
<Trans key="selectionRégime.comparer.cta">Comparer les régimes</Trans>
<Trans i18nKey="selectionRégime.comparer.cta">
Comparer les régimes
</Trans>
</Link>
</p>
</animate.fromBottom>

View File

@ -13,7 +13,7 @@ export default function SocialSecurity() {
</Helmet>
<Animate.fromBottom>
<Trans key="sécu.contenu">
<Trans i18nKey="sécu.contenu">
<h1>Protection sociale </h1>
<p>
En France, tous les travailleurs bénéficient d'une protection

View File

@ -25,12 +25,12 @@ export default function Landing() {
/>
<header>
<h1>
<Trans key="landing.title">
<Trans i18nKey="landing.title">
L'assistant officiel du créateur d'entreprise
</Trans>
</h1>
<p className="ui__ lead">
<Trans key="landing.subtitle">
<Trans i18nKey="landing.subtitle">
Les ressources nécessaires pour développer votre activité, du
statut juridique à l'embauche.
</Trans>
@ -46,7 +46,7 @@ export default function Landing() {
}
>
<div className="ui__ big box-icon">{emoji('💡')}</div>
<Trans key="landing.choice.create">
<Trans i18nKey="landing.choice.create">
<h3>Créer une entreprise</h3>
<p className="ui__ notice" css="flex: 1">
Un accompagnement au choix du statut juridique et la liste
@ -59,7 +59,7 @@ export default function Landing() {
</Link>
<Link className="ui__ interactive card box " to={sitePaths.gérer.index}>
<div className="ui__ big box-icon">{emoji('💶')}</div>
<Trans key="landing.choice.manage">
<Trans i18nKey="landing.choice.manage">
<h3>Gérer mon activité</h3>
<p className="ui__ notice" css="flex: 1">
Des simulateurs pour anticiper le montant des cotisations sociales
@ -75,7 +75,7 @@ export default function Landing() {
to={sitePaths.économieCollaborative.index}
>
<div className="ui__ big box-icon">{emoji('🙋')}</div>
<Trans key="landing.choice.declare">
<Trans i18nKey="landing.choice.declare">
<h3>Que dois-je déclarer ?</h3>
<p className="ui__ notice" css="flex: 1">
Un guide pour savoir comment déclarer vos revenus issus de
@ -92,14 +92,14 @@ export default function Landing() {
className="ui__ small button "
>
{emoji('🧮')}{' '}
<Trans key="landing.seeSimulators">
<Trans i18nKey="landing.seeSimulators">
Voir la liste des simulateurs
</Trans>
</Link>
</div>
</section>
<section className="ui__ container">
<Trans key="landing.aboutUs">
<Trans i18nKey="landing.aboutUs">
<h2>Qui sommes-nous ?</h2>
<p>
Nous avons développé ce site pour{' '}

View File

@ -34,7 +34,7 @@ export default function AssimiléSalarié() {
/>
</Helmet>
<h1>
<Trans key="simulateurs.assimilé-salarié.titre">
<Trans i18nKey="simulateurs.assimilé-salarié.titre">
Simulateur de revenus assimilé salarié
</Trans>
</h1>

View File

@ -39,7 +39,7 @@ export default function AutoEntrepreneur() {
/>
</Helmet>
<h1>
<Trans key="simulateurs.auto-entrepreneur.titre">
<Trans i18nKey="simulateurs.auto-entrepreneur.titre">
Simulateur de revenus auto-entrepreneur
</Trans>
</h1>

View File

@ -35,7 +35,7 @@ export default function Simulateurs() {
}}
>
<div className="ui__ big box-icon">{emoji('☂️')}</div>
<Trans key="simulateurs.accueil.assimilé">
<Trans i18nKey="simulateurs.accueil.assimilé">
<h3>Assimilé salarié</h3>
<p className="ui__ notice" css="flex: 1">
Calculer le revenu d'un dirigeant de SAS, SASU ou SARL
@ -51,7 +51,7 @@ export default function Simulateurs() {
}}
>
<div className="ui__ big box-icon">{emoji('🃏')}</div>
<Trans key="simulateurs.accueil.indépendant">
<Trans i18nKey="simulateurs.accueil.indépendant">
<h3>Indépendant</h3>
<p className="ui__ notice" css="flex: 1">
Calculer le revenu d'un dirigeant de EURL, EI, ou SARL
@ -67,7 +67,7 @@ export default function Simulateurs() {
}}
>
<div className="ui__ big box-icon">{emoji('🧢')}</div>
<Trans key="simulateurs.accueil.auto">
<Trans i18nKey="simulateurs.accueil.auto">
<h3>Auto-entrepreneur</h3>
<p className="ui__ notice" css="flex: 1">
Calculer le revenu (ou le chiffre d'affaires) d'un
@ -83,7 +83,7 @@ export default function Simulateurs() {
}}
>
<div className="ui__ big box-icon">{emoji('🤝')}</div>
<Trans key="simulateurs.accueil.salarié">
<Trans i18nKey="simulateurs.accueil.salarié">
<h3>Salarié</h3>
<p className="ui__ notice" css="flex: 1">
Calculer le salaire net, brut, ou total d'un salarié, stagiaire,
@ -100,7 +100,7 @@ export default function Simulateurs() {
}}
>
<div className="ui__ big box-icon">{emoji('👩‍🎨')}</div>
<Trans key="simulateurs.accueil.salarié">
<Trans i18nKey="simulateurs.accueil.salarié">
<h3>Artiste-auteur</h3>
<p className="ui__ notice" css="flex: 1">
Estimer les cotisations sociales d'un artiste ou auteur
@ -116,7 +116,7 @@ export default function Simulateurs() {
}}
>
<div className="ui__ big box-icon">{emoji('📊')}</div>
<Trans key="simulateurs.accueil.comparaison">
<Trans i18nKey="simulateurs.accueil.comparaison">
<h3>Comparaison statuts</h3>
<p className="ui__ notice" css="flex: 1">
Simulez les différences entre les régimes (cotisations,
@ -127,7 +127,7 @@ export default function Simulateurs() {
</div>
</section>
<section>
<Trans key="simulateurs.accueil.description">
<Trans i18nKey="simulateurs.accueil.description">
<p>Tous les simulateurs sur ce site sont :</p>
<ul>
<li>

View File

@ -35,7 +35,7 @@ export default function Indépendant() {
/>
</Helmet>
<h1>
<Trans key="simulateurs.indépendant.titre">
<Trans i18nKey="simulateurs.indépendant.titre">
Simulateur de revenus pour indépendants
</Trans>
</h1>

View File

@ -36,7 +36,7 @@ export default function Salarié() {
/>
</Helmet>
<h1>
<Trans key="simulateurs.salarié.titre">
<Trans i18nKey="simulateurs.salarié.titre">
Simulateur de revenus pour salarié
</Trans>
</h1>
@ -104,7 +104,7 @@ export let SalarySimulation = () => {
explanations={<SalaryExplanation />}
customEndMessages={
<>
<Trans key="simulation-end.hiring.text">
<Trans i18nKey="simulation-end.hiring.text">
Vous pouvez maintenant concrétiser votre projet d'embauche.
</Trans>
<div style={{ textAlign: 'center', margin: '1rem' }}>
@ -112,7 +112,9 @@ export let SalarySimulation = () => {
className="ui__ plain button"
to={sitePaths.gérer.embaucher}
>
<Trans key="simulation-end.cta">Connaître les démarches</Trans>
<Trans i18nKey="simulation-end.cta">
Connaître les démarches
</Trans>
</Link>
</div>
</>

View File

@ -23,14 +23,14 @@ export default function SchemeComparaisonPage() {
/>
</Helmet>
<h1>
<Trans key="comparaisonRégimes.titre">
<Trans i18nKey="comparaisonRégimes.titre">
Indépendant, assimilé salarié ou{' '}
<span style={{ whiteSpace: 'nowrap' }}>auto-entrepreneur</span> : quel
régime choisir ?
</Trans>
</h1>
<p>
<Trans key="comparaisonRégimes.description">
<Trans i18nKey="comparaisonRégimes.description">
Lorsque vous créez votre société, le choix du statut juridique va
déterminer à quel régime social le dirigeant est affilié. Il en existe
trois différents, avec chacun ses avantages et inconvénients. Avec ce

View File

@ -35,7 +35,7 @@ export default function Activité({
<h1>{activité.titre}</h1>
<p>{activité.explication}</p>
<p>
<Trans key="économieCollaborative.activité.choix">
<Trans i18nKey="économieCollaborative.activité.choix">
Quelles sont plus précisément les activités exercées ?
</Trans>
</p>
@ -71,7 +71,7 @@ export default function Activité({
/>
{estExonérée ? null : activité['seuil pro'] === 0 ? (
<Trans key="économieCollaborative.activité.pro">
<Trans i18nKey="économieCollaborative.activité.pro">
<h2>Il s'agit d'une activité professionnelle</h2>
<p>
Les revenus de cette activité sont considérés comme des{' '}
@ -79,13 +79,13 @@ export default function Activité({
</p>
</Trans>
) : activité['seuil déclaration'] === 0 && !activité['seuil pro'] ? (
<Trans key="économieCollaborative.activité.impôt">
<Trans i18nKey="économieCollaborative.activité.impôt">
<h2>Vous devez déclarez vos revenus aux impôts</h2>
<p>Les revenus de cette activité sont imposables.</p>
</Trans>
) : (
<>
<Trans key="économieCollaborative.activité.revenusAnnuels">
<Trans i18nKey="économieCollaborative.activité.revenusAnnuels">
<h2>Revenus annuels</h2>
<p>Vos revenus annuels pour cette activité sont :</p>
</Trans>

View File

@ -35,7 +35,7 @@ export default function ActivitésSelection() {
<ScrollToTop />
<h1>{titre}</h1>
<section css="margin-bottom: 2rem">
<Trans key="économieCollaborative.accueil.contenu">
<Trans i18nKey="économieCollaborative.accueil.contenu">
<p>
Vous avez des revenus issus des{' '}
<strong>plateformes en ligne</strong> (Airbnb, Abritel, Drivy,
@ -56,13 +56,13 @@ export default function ActivitésSelection() {
<section className="ui__ full-width light-bg">
<h2 className="ui__ container" css="text-align: center">
<Trans key="économieCollaborative.accueil.question">
<Trans i18nKey="économieCollaborative.accueil.question">
Quels types d'activités avez-vous exercé ?
</Trans>
</h2>
<ActivitéSelection activités={activités.map(({ titre }) => titre)} />
<p className="ui__ container notice" css="text-align: center">
<Trans key="économieCollaborative.accueil.réassurance">
<Trans i18nKey="économieCollaborative.accueil.réassurance">
PS : cet outil est là uniquement pour vous informer, aucune donnée
ne sera transmise aux administrations
</Trans>{' '}

View File

@ -17,7 +17,7 @@ export default function ExceptionsExonération({
return (
<>
<h2>
<Trans key="économieCollaborative.exonération.question">
<Trans i18nKey="économieCollaborative.exonération.question">
Êtes-vous dans un des cas suivants ?
</Trans>
</h2>
@ -37,7 +37,7 @@ export default function ExceptionsExonération({
))}
</Checklist>
<p className="ui__ notice">
<Trans key="économieCollaborative.exonération.notice">
<Trans i18nKey="économieCollaborative.exonération.notice">
Si aucun de ces cas ne s'appliquent à vous, vous n'aurez rien à
déclarer.
</Trans>

View File

@ -33,7 +33,7 @@ export default function NextButton({ activité, disabled }) {
{nextActivité || disabled ? (
<Trans>Continuer</Trans>
) : (
<Trans key="économieCollaborative.activité.voirObligations">
<Trans i18nKey="économieCollaborative.activité.voirObligations">
Voir mes obligations
</Trans>
)}

View File

@ -54,7 +54,7 @@ export default function VotreSituation() {
<section>
{déclarations.RÉGIME_GÉNÉRAL_DISPONIBLE.length > 0 && (
<>
<Trans key="économieCollaborative.obligations.pro">
<Trans i18nKey="économieCollaborative.obligations.pro">
<h2>Déclarer en tant qu'activité professionnelle</h2>
<p>
Vos revenus sont considérés comme revenus professionnels, ils
@ -64,7 +64,7 @@ export default function VotreSituation() {
</p>
</Trans>
<ActivitéList activités={déclarations.RÉGIME_GÉNÉRAL_DISPONIBLE} />
<Trans key="économieCollaborative.obligations.entreprise">
<Trans i18nKey="économieCollaborative.obligations.entreprise">
<h3>Avec une entreprise</h3>
<p>
Si vous possédez déjà une activité déclarée, vous pouvez ajouter
@ -83,7 +83,7 @@ export default function VotreSituation() {
</Trans>
{régimeGénéralDisponible && (
<Trans key="économieCollaborative.obligations.régimeGénéral">
<Trans i18nKey="économieCollaborative.obligations.régimeGénéral">
<h3>Avec l'option régime général</h3>
<p>
Pour certaines activités, vous pouvez déclarer vos revenus
@ -105,7 +105,7 @@ export default function VotreSituation() {
)}
{déclarations.IMPOSITION.length > 0 && (
<>
<Trans key="économieCollaborative.obligations.impôts">
<Trans i18nKey="économieCollaborative.obligations.impôts">
<h2>Déclarer vos revenus aux impôts</h2>
<p>
Pour ces activités, vous avez uniquement besoin de déclarer vos
@ -123,7 +123,7 @@ export default function VotreSituation() {
{déclarations.AUCUN.length > 0 && (
<>
<Trans key="économieCollaborative.obligations.aucune">
<Trans i18nKey="économieCollaborative.obligations.aucune">
<h2>Rien à faire</h2>
<p>
Vous n'avez pas besoin de déclarer vos revenus pour ces
@ -150,7 +150,7 @@ const ActivitéList = ({ activités }) => {
answered
label={
régimeGénéralDisponibleSelector(state, title) ? (
<Trans key="économieCollaborative.obligations.régimeGénéralDisponible">
<Trans i18nKey="économieCollaborative.obligations.régimeGénéralDisponible">
Régime général disponible
</Trans>
) : null

View File

@ -21,7 +21,7 @@ export default function ÉconomieCollaborative() {
className="ui__ simple small push-left button "
>
{' '}
<Trans key="économieCollaborative.retourAccueil">
<Trans i18nKey="économieCollaborative.retourAccueil">
Retour à la selection d'activités
</Trans>
</NavLink>

442
yarn.lock
View File

@ -1828,6 +1828,13 @@ anymatch@^2.0.0:
micromatch "^3.1.4"
normalize-path "^2.1.1"
append-buffer@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1"
integrity sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=
dependencies:
buffer-equal "^1.0.0"
aproba@^1.1.1:
version "1.2.0"
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
@ -2354,6 +2361,16 @@ braces@^2.3.1, braces@^2.3.2:
split-string "^3.0.2"
to-regex "^3.0.1"
broccoli-plugin@^1.3.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/broccoli-plugin/-/broccoli-plugin-1.3.1.tgz#a26315732fb99ed2d9fb58f12a1e14e986b4fabd"
integrity sha512-DW8XASZkmorp+q7J4EeDEZz+LoyKLAd2XZULXyD9l4m9/hAKV3vjHmB1kiUshcWAYMgTP1m2i4NnqCE/23h6AQ==
dependencies:
promise-map-series "^0.2.1"
quick-temp "^0.1.3"
rimraf "^2.3.4"
symlink-or-copy "^1.1.8"
brorand@^1.0.1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
@ -2464,6 +2481,11 @@ buffer-crc32@~0.2.3:
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
buffer-equal@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe"
integrity sha1-WWFrSYME1Var1GaWayLu2j7KX74=
buffer-from@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
@ -2715,7 +2737,7 @@ check-more-types@2.24.0:
resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600"
integrity sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA=
cheerio@^1.0.0-rc.3:
cheerio@^1.0.0-rc.2, cheerio@^1.0.0-rc.3:
version "1.0.0-rc.3"
resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6"
integrity sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==
@ -2877,11 +2899,35 @@ cliui@^5.0.0:
strip-ansi "^5.2.0"
wrap-ansi "^5.1.0"
clone@^1.0.2:
clone-buffer@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58"
integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg=
clone-stats@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680"
integrity sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=
clone@^1.0.0, clone@^1.0.2:
version "1.0.4"
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
clone@^2.1.1:
version "2.1.2"
resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=
cloneable-readable@^1.0.0:
version "1.1.3"
resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec"
integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==
dependencies:
inherits "^2.0.1"
process-nextick-args "^2.0.0"
readable-stream "^2.3.5"
clsx@^1.0.1:
version "1.0.4"
resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.0.4.tgz#0c0171f6d5cb2fe83848463c15fcc26b4df8c2ec"
@ -2976,6 +3022,11 @@ colors@~1.1.2:
resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM=
colors@~1.2.0-rc0:
version "1.2.5"
resolved "https://registry.yarnpkg.com/colors/-/colors-1.2.5.tgz#89c7ad9a374bc030df8013241f68136ed8835afc"
integrity sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==
combined-stream@^1.0.6, combined-stream@~1.0.6:
version "1.0.8"
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
@ -3008,6 +3059,13 @@ commander@~2.19.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==
commander@~2.9.0:
version "2.9.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=
dependencies:
graceful-readlink ">= 1.0.0"
common-tags@1.8.0, common-tags@^1.4.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937"
@ -3048,7 +3106,7 @@ concat-map@0.0.1:
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
concat-stream@1.6.2, concat-stream@^1.5.0:
concat-stream@1.6.2, concat-stream@^1.5.0, concat-stream@~1.6.0:
version "1.6.2"
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
@ -3481,6 +3539,11 @@ date-fns@^1.27.2:
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c"
integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==
de-indent@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d"
integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=
debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
@ -3956,6 +4019,11 @@ enzyme@^3.3.0:
rst-selector-parser "^2.2.3"
string.prototype.trim "^1.2.1"
eol@^0.9.1:
version "0.9.1"
resolved "https://registry.yarnpkg.com/eol/-/eol-0.9.1.tgz#f701912f504074be35c6117a5c4ade49cd547acd"
integrity sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==
errno@^0.1.3, errno@~0.1.7:
version "0.1.7"
resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
@ -4602,7 +4670,7 @@ flatten@^1.0.2:
resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b"
integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==
flush-write-stream@^1.0.0:
flush-write-stream@^1.0.0, flush-write-stream@^1.0.2:
version "1.1.1"
resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==
@ -4698,6 +4766,23 @@ fs-extra@^4.0.2:
jsonfile "^4.0.0"
universalify "^0.1.0"
fs-extra@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-6.0.1.tgz#8abc128f7946e310135ddc93b98bddb410e7a34b"
integrity sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==
dependencies:
graceful-fs "^4.1.2"
jsonfile "^4.0.0"
universalify "^0.1.0"
fs-mkdirp-stream@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb"
integrity sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=
dependencies:
graceful-fs "^4.1.11"
through2 "^2.0.3"
fs-write-stream-atomic@^1.0.8:
version "1.0.10"
resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
@ -4821,6 +4906,22 @@ glob-parent@^5.0.0:
dependencies:
is-glob "^4.0.1"
glob-stream@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4"
integrity sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=
dependencies:
extend "^3.0.0"
glob "^7.1.1"
glob-parent "^3.1.0"
is-negated-glob "^1.0.0"
ordered-read-streams "^1.0.0"
pumpify "^1.3.5"
readable-stream "^2.1.5"
remove-trailing-separator "^1.0.1"
to-absolute-glob "^2.0.0"
unique-stream "^2.0.2"
glob@7.1.2:
version "7.1.2"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
@ -4833,7 +4934,7 @@ glob@7.1.2:
once "^1.3.0"
path-is-absolute "^1.0.0"
glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
version "7.1.6"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
@ -4927,11 +5028,16 @@ good-listener@^1.2.2:
dependencies:
delegate "^3.1.2"
graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6:
graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6:
version "4.2.3"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423"
integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==
"graceful-readlink@>= 1.0.0":
version "1.0.1"
resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=
growl@1.10.5:
version "1.10.5"
resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
@ -4947,6 +5053,13 @@ gud@^1.0.0:
resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0"
integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==
gulp-sort@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/gulp-sort/-/gulp-sort-2.0.0.tgz#c6762a2f1f0de0a3fc595a21599d3fac8dba1aca"
integrity sha1-xnYqLx8N4KP8WVohWZ0/rI26Gso=
dependencies:
through2 "^2.0.1"
handlebars@^4.1.2:
version "4.5.3"
resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482"
@ -5067,7 +5180,7 @@ he@1.1.1:
resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0=
he@1.2.x, he@^1.1.1:
he@1.2.x, he@^1.1.0, he@^1.1.1:
version "1.2.0"
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
@ -5304,6 +5417,27 @@ https-proxy-agent@^2.2.1:
agent-base "^4.3.0"
debug "^3.1.0"
"i18next-parser@https://github.com/i18next/i18next-parser#master":
version "1.0.0"
resolved "https://github.com/i18next/i18next-parser#bb1d82074591ab1cc2ce885d4ea6be26ba0f36d1"
dependencies:
broccoli-plugin "^1.3.0"
cheerio "^1.0.0-rc.2"
colors "~1.2.0-rc0"
commander "~2.9.0"
concat-stream "~1.6.0"
eol "^0.9.1"
fs-extra "^6.0.1"
gulp-sort "^2.0.0"
i18next "^19.0.1"
rsvp "^4.8.2"
through2 "~2.0.3"
typescript "^3.6.4"
vinyl "~2.0.1"
vinyl-fs "^3.0.2"
vue-template-compiler "^2.6.11"
yamljs "^0.3.0"
i18next@^18.0.1:
version "18.0.1"
resolved "https://registry.yarnpkg.com/i18next/-/i18next-18.0.1.tgz#10841209f6983df4d8e367204da403d8cbc609cf"
@ -5311,6 +5445,13 @@ i18next@^18.0.1:
dependencies:
"@babel/runtime" "^7.3.1"
i18next@^19.0.1:
version "19.0.3"
resolved "https://registry.yarnpkg.com/i18next/-/i18next-19.0.3.tgz#31fd3165762d9802e08a2a86932db4eff5c862e9"
integrity sha512-Ru4afr++b4cUApsIBifcMYyWG9Nx8wlFdq4DuOF+UuoPoQKfuh0iAVMekTjs6w1CZLUOVb5QZEuoYRLmu17EIA==
dependencies:
"@babel/runtime" "^7.3.1"
iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@~0.4.13:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
@ -5504,6 +5645,14 @@ is-absolute-url@^2.0.0:
resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=
is-absolute@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576"
integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==
dependencies:
is-relative "^1.0.0"
is-windows "^1.0.1"
is-accessor-descriptor@^0.1.6:
version "0.1.6"
resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
@ -5692,6 +5841,11 @@ is-installed-globally@0.1.0:
global-dirs "^0.1.0"
is-path-inside "^1.0.0"
is-negated-glob@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2"
integrity sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=
is-number-object@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197"
@ -5745,6 +5899,13 @@ is-regexp@^1.0.0:
resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk=
is-relative@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d"
integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==
dependencies:
is-unc-path "^1.0.0"
is-stream@^1.0.1, is-stream@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
@ -5779,6 +5940,23 @@ is-typedarray@~1.0.0:
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
is-unc-path@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d"
integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==
dependencies:
unc-path-regex "^0.1.2"
is-utf8@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
is-valid-glob@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa"
integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=
is-what@^3.3.1:
version "3.5.0"
resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.5.0.tgz#c50b0e8f3021e0b39410c159bea43a5510d99027"
@ -6517,6 +6695,13 @@ lazy-ass@1.6.0:
resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513"
integrity sha1-eZllXoZGwX8In90YfRUNMyTVRRM=
lazystream@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4"
integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=
dependencies:
readable-stream "^2.0.5"
lcid@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf"
@ -6524,6 +6709,13 @@ lcid@^2.0.0:
dependencies:
invert-kv "^2.0.0"
lead@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/lead/-/lead-1.0.0.tgz#6f14f99a37be3a9dd784f5495690e5903466ee42"
integrity sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=
dependencies:
flush-write-stream "^1.0.2"
left-pad@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e"
@ -7111,6 +7303,11 @@ mkdirp@0.5.1, mkdirp@^0.5.1, mkdirp@~0.5.1:
dependencies:
minimist "0.0.8"
mktemp@~0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/mktemp/-/mktemp-0.4.0.tgz#6d0515611c8a8c84e484aa2000129b98e981ff0b"
integrity sha1-bQUVYRyKjITkhKogABKbmOmB/ws=
mocha-webpack@^2.0.0-beta.0:
version "2.0.0-beta.0"
resolved "https://registry.yarnpkg.com/mocha-webpack/-/mocha-webpack-2.0.0-beta.0.tgz#d85fc9a70f82a4ad595b7702a1181605dfa59549"
@ -7389,6 +7586,13 @@ normalize-url@^1.4.0:
query-string "^4.1.0"
sort-keys "^1.0.0"
now-and-later@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.1.tgz#8e579c8685764a7cc02cb680380e94f43ccb1f7c"
integrity sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==
dependencies:
once "^1.3.2"
npm-run-path@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
@ -7531,7 +7735,7 @@ on-headers@~1.0.1:
resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
once@^1.3.0, once@^1.3.1, once@^1.4.0:
once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
@ -7585,6 +7789,13 @@ ora@^0.2.3:
cli-spinners "^0.1.2"
object-assign "^4.0.1"
ordered-read-streams@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e"
integrity sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=
dependencies:
readable-stream "^2.0.1"
os-browserify@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
@ -8301,7 +8512,7 @@ private@^0.1.6, private@~0.1.5:
resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==
process-nextick-args@~2.0.0:
process-nextick-args@^2.0.0, process-nextick-args@~2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
@ -8326,6 +8537,13 @@ promise-limit@^2.5.0:
resolved "https://registry.yarnpkg.com/promise-limit/-/promise-limit-2.7.0.tgz#eb5737c33342a030eaeaecea9b3d3a93cb592b26"
integrity sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==
promise-map-series@^0.2.1:
version "0.2.3"
resolved "https://registry.yarnpkg.com/promise-map-series/-/promise-map-series-0.2.3.tgz#c2d377afc93253f6bd03dbb77755eb88ab20a847"
integrity sha1-wtN3r8kyU/a9A9u3d1XriKsgqEc=
dependencies:
rsvp "^3.0.14"
prompts@^2.0.1:
version "2.3.0"
resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.0.tgz#a444e968fa4cc7e86689a74050685ac8006c4cc4"
@ -8415,7 +8633,7 @@ pump@^3.0.0:
end-of-stream "^1.1.0"
once "^1.3.1"
pumpify@^1.3.3:
pumpify@^1.3.3, pumpify@^1.3.5:
version "1.5.1"
resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
@ -8491,6 +8709,15 @@ querystring@0.2.0, querystring@^0.2.0:
resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
quick-temp@^0.1.3:
version "0.1.8"
resolved "https://registry.yarnpkg.com/quick-temp/-/quick-temp-0.1.8.tgz#bab02a242ab8fb0dd758a3c9776b32f9a5d94408"
integrity sha1-urAqJCq4+w3XWKPJd2sy+aXZRAg=
dependencies:
mktemp "~0.4.0"
rimraf "^2.5.4"
underscore.string "~3.3.4"
raf@^3.4.1:
version "3.4.1"
resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39"
@ -8895,6 +9122,19 @@ read-pkg@^3.0.0:
string_decoder "~1.1.1"
util-deprecate "~1.0.1"
readable-stream@^2.0.5, readable-stream@^2.3.5:
version "2.3.7"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
dependencies:
core-util-is "~1.0.0"
inherits "~2.0.3"
isarray "~1.0.0"
process-nextick-args "~2.0.0"
safe-buffer "~5.1.1"
string_decoder "~1.1.1"
util-deprecate "~1.0.1"
readable-stream@^3.1.1:
version "3.4.0"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc"
@ -9106,6 +9346,23 @@ remark-parse@^5.0.0:
vfile-location "^2.0.0"
xtend "^4.0.1"
remove-bom-buffer@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53"
integrity sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==
dependencies:
is-buffer "^1.1.5"
is-utf8 "^0.2.1"
remove-bom-stream@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz#05f1a593f16e42e1fb90ebf59de8e569525f9523"
integrity sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=
dependencies:
remove-bom-buffer "^3.0.0"
safe-buffer "^5.1.0"
through2 "^2.0.3"
remove-trailing-separator@^1.0.1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
@ -9139,7 +9396,7 @@ repeating@^2.0.0:
dependencies:
is-finite "^1.0.0"
replace-ext@1.0.0:
replace-ext@1.0.0, replace-ext@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb"
integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=
@ -9243,6 +9500,13 @@ resolve-from@^4.0.0:
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
resolve-options@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131"
integrity sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=
dependencies:
value-or-function "^3.0.0"
resolve-pathname@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd"
@ -9293,7 +9557,7 @@ rimraf@2.6.3:
dependencies:
glob "^7.1.3"
rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3:
rimraf@^2.3.4, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3:
version "2.7.1"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
@ -9316,7 +9580,12 @@ rst-selector-parser@^2.2.3:
lodash.flattendeep "^4.4.0"
nearley "^2.7.10"
rsvp@^4.8.4:
rsvp@^3.0.14:
version "3.6.2"
resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a"
integrity sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==
rsvp@^4.8.2, rsvp@^4.8.4:
version "4.8.5"
resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734"
integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==
@ -9767,6 +10036,11 @@ split-string@^3.0.1, split-string@^3.0.2:
dependencies:
extend-shallow "^3.0.0"
sprintf-js@^1.0.3:
version "1.1.2"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673"
integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==
sprintf-js@~1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
@ -10132,6 +10406,11 @@ symbol-tree@^3.2.2:
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
symlink-or-copy@^1.1.8:
version "1.3.1"
resolved "https://registry.yarnpkg.com/symlink-or-copy/-/symlink-or-copy-1.3.1.tgz#9506dd64d8e98fa21dcbf4018d1eab23e77f71fe"
integrity sha512-0K91MEXFpBUaywiwSSkmKjnGcasG/rVBXFLJz5DrgGabpYD6N+3yZrfD6uUIfpuTu65DZLHi7N8CizHc07BPZA==
tabbable@^1.0.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-1.1.3.tgz#0e4ee376f3631e42d7977a074dbd2b3827843081"
@ -10208,7 +10487,15 @@ throttleit@^1.0.0:
resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c"
integrity sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=
through2@^2.0.0:
through2-filter@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254"
integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==
dependencies:
through2 "~2.0.0"
xtend "~4.0.0"
through2@^2.0.0, through2@^2.0.1, through2@^2.0.3, through2@~2.0.0, through2@~2.0.3:
version "2.0.5"
resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
@ -10267,6 +10554,14 @@ tmpl@1.0.x:
resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=
to-absolute-glob@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b"
integrity sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=
dependencies:
is-absolute "^1.0.0"
is-negated-glob "^1.0.0"
to-arraybuffer@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
@ -10307,6 +10602,13 @@ to-regex@^3.0.1, to-regex@^3.0.2:
regex-not "^1.0.2"
safe-regex "^1.1.0"
to-through@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/to-through/-/to-through-2.0.0.tgz#fc92adaba072647bc0b67d6b03664aa195093af6"
integrity sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=
dependencies:
through2 "^2.0.3"
toidentifier@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
@ -10431,6 +10733,11 @@ typedarray@^0.0.6:
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
typescript@^3.6.4:
version "3.7.5"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.5.tgz#0692e21f65fd4108b9330238aac11dd2e177a1ae"
integrity sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw==
typescript@^3.7.2:
version "3.7.4"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.4.tgz#1743a5ec5fef6a1fa9f3e4708e33c81c73876c19"
@ -10452,6 +10759,19 @@ uglify-js@^3.1.4:
commander "~2.20.3"
source-map "~0.6.1"
unc-path-regex@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo=
underscore.string@~3.3.4:
version "3.3.5"
resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.5.tgz#fc2ad255b8bd309e239cbc5816fd23a9b7ea4023"
integrity sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==
dependencies:
sprintf-js "^1.0.3"
util-deprecate "^1.0.2"
unherit@^1.0.4:
version "1.1.2"
resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.2.tgz#14f1f397253ee4ec95cec167762e77df83678449"
@ -10536,6 +10856,14 @@ unique-slug@^2.0.0:
dependencies:
imurmurhash "^0.1.4"
unique-stream@^2.0.2:
version "2.3.1"
resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac"
integrity sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==
dependencies:
json-stable-stringify-without-jsonify "^1.0.1"
through2-filter "^3.0.0"
unist-util-is@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd"
@ -10652,7 +10980,7 @@ use@^3.1.0:
resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
util-deprecate@^1.0.1, util-deprecate@~1.0.1:
util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
@ -10717,6 +11045,11 @@ value-equal@^1.0.1:
resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c"
integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==
value-or-function@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813"
integrity sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=
vary@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
@ -10758,6 +11091,67 @@ vfile@^2.0.0:
unist-util-stringify-position "^1.0.0"
vfile-message "^1.0.0"
vinyl-fs@^3.0.2:
version "3.0.3"
resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7"
integrity sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==
dependencies:
fs-mkdirp-stream "^1.0.0"
glob-stream "^6.1.0"
graceful-fs "^4.0.0"
is-valid-glob "^1.0.0"
lazystream "^1.0.0"
lead "^1.0.0"
object.assign "^4.0.4"
pumpify "^1.3.5"
readable-stream "^2.3.3"
remove-bom-buffer "^3.0.0"
remove-bom-stream "^1.2.0"
resolve-options "^1.1.0"
through2 "^2.0.0"
to-through "^2.0.0"
value-or-function "^3.0.0"
vinyl "^2.0.0"
vinyl-sourcemap "^1.1.0"
vinyl-sourcemap@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz#92a800593a38703a8cdb11d8b300ad4be63b3e16"
integrity sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=
dependencies:
append-buffer "^1.0.2"
convert-source-map "^1.5.0"
graceful-fs "^4.1.6"
normalize-path "^2.1.1"
now-and-later "^2.0.0"
remove-bom-buffer "^3.0.0"
vinyl "^2.0.0"
vinyl@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86"
integrity sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==
dependencies:
clone "^2.1.1"
clone-buffer "^1.0.0"
clone-stats "^1.0.0"
cloneable-readable "^1.0.0"
remove-trailing-separator "^1.0.1"
replace-ext "^1.0.0"
vinyl@~2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.0.2.tgz#0a3713d8d4e9221c58f10ca16c0116c9e25eda7c"
integrity sha1-CjcT2NTpIhxY8QyhbAEWyeJe2nw=
dependencies:
clone "^1.0.0"
clone-buffer "^1.0.0"
clone-stats "^1.0.0"
cloneable-readable "^1.0.0"
is-stream "^1.1.0"
remove-trailing-separator "^1.0.1"
replace-ext "^1.0.0"
vm-browserify@^1.0.1:
version "1.1.2"
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
@ -10768,6 +11162,14 @@ void-elements@^2.0.1:
resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec"
integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=
vue-template-compiler@^2.6.11:
version "2.6.11"
resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz#c04704ef8f498b153130018993e56309d4698080"
integrity sha512-KIq15bvQDrcCjpGjrAhx4mUlyyHfdmTaoNfeoATHLAiWB+MU3cx4lOzMwrnUh9cCxy0Lt1T11hAFY6TQgroUAA==
dependencies:
de-indent "^1.0.2"
he "^1.1.0"
w3c-hr-time@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045"
@ -11164,7 +11566,7 @@ xmlchars@^2.1.1:
resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1:
xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
@ -11210,6 +11612,14 @@ yaml@^1.7.2:
dependencies:
"@babel/runtime" "^7.6.3"
yamljs@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/yamljs/-/yamljs-0.3.0.tgz#dc060bf267447b39f7304e9b2bfbe8b5a7ddb03b"
integrity sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==
dependencies:
argparse "^1.0.7"
glob "^7.0.5"
yargs-parser@^13.1.0, yargs-parser@^13.1.1:
version "13.1.1"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0"