diff --git a/CONTRIBUTION.md b/CONTRIBUTION.md index 1ff76871e..81ca3858e 100644 --- a/CONTRIBUTION.md +++ b/CONTRIBUTION.md @@ -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 ``, 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. diff --git a/circle.yml b/circle.yml index 3e90e11e2..d39046574 100644 --- a/circle.yml +++ b/circle.yml @@ -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 diff --git a/i18next-parser.config.js b/i18next-parser.config.js index 55bef5c01..8115205b2 100644 --- a/i18next-parser.config.js +++ b/i18next-parser.config.js @@ -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, diff --git a/package.json b/package.json index 34c8e87e5..019153802 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/source/components/FindCompany.tsx b/source/components/FindCompany.tsx index 1b1edbd66..d93342940 100644 --- a/source/components/FindCompany.tsx +++ b/source/components/FindCompany.tsx @@ -28,10 +28,10 @@ export default function Search() { return ( <>

- Retrouver mon entreprise + Retrouver mon entreprise

- + Grâce à la base SIREN, les données publiques sur votre entreprise seront automatiquement disponibles pour la suite du parcours sur le site. diff --git a/source/components/NewsletterRegister.tsx b/source/components/NewsletterRegister.tsx index e99976de4..135e4166e 100644 --- a/source/components/NewsletterRegister.tsx +++ b/source/components/NewsletterRegister.tsx @@ -24,11 +24,11 @@ export default function Newsletter() { <> {' '}

- Restez informé + Restez informé

- + Inscrivez-vous à notre newsletter mensuelle pour recevoir des{' '} conseils officiels sur la création d’entreprise et accéder aux nouvelles fonctionnalités en avant-première. diff --git a/source/components/QuickLinks.tsx b/source/components/QuickLinks.tsx index 93a803d90..e473939c0 100644 --- a/source/components/QuickLinks.tsx +++ b/source/components/QuickLinks.tsx @@ -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))} > - {label} + {label} ))}{' '} {/* */} diff --git a/source/components/Route404.tsx b/source/components/Route404.tsx index 65ae22fb6..5cbd289be 100644 --- a/source/components/Route404.tsx +++ b/source/components/Route404.tsx @@ -14,14 +14,16 @@ export default () => ( }} >

- Cette page n'existe pas ou n'existe plus + + Cette page n'existe pas ou n'existe plus + {emoji(' 🙅')}

{/* TODO: credits for the image to add: https://thenounproject.com/term/treasure-map/96666/ */} - Revenir en lieu sûr + Revenir en lieu sûr
diff --git a/source/components/SalaryExplanation.tsx b/source/components/SalaryExplanation.tsx index 2529ef398..62646d138 100644 --- a/source/components/SalaryExplanation.tsx +++ b/source/components/SalaryExplanation.tsx @@ -103,7 +103,7 @@ function RevenueRepatitionSection() { return (

- Répartition du total chargé + Répartition du total chargé

{emoji('☂')} Assimilé salarié - + Le régime tout compris @@ -90,7 +84,7 @@ export default function SchemeComparaison({ Indépendant )} - + La protection sociale à la carte @@ -98,20 +92,20 @@ export default function SchemeComparaison({

{emoji('🚶‍♂️')} Auto-entrepreneur - + Pour commencer sans risques

- + Statuts juridiques possibles

- + SAS, SASU ou SARL avec gérant minoritaire
@@ -119,19 +113,19 @@ export default function SchemeComparaison({
{hideAssimiléSalarié ? ( - EI ou EIRL + EI ou EIRL ) : ( - + EI, EIRL, EURL ou SARL avec gérant majoritaire )}
- Auto-entreprise + Auto-entreprise
- +

Couverture accidents du travail

@@ -142,14 +136,14 @@ export default function SchemeComparaison({
Non
- +

Assurance maladie{' '} (médicaments, soins, hospitalisations)

Identique pour tous
- +

Mutuelle santé @@ -158,13 +152,13 @@ export default function SchemeComparaison({
Fortement conseillée
- +

Indemnités journalières

++
++
+
- +

Retraite

+++
@@ -173,13 +167,13 @@ export default function SchemeComparaison({ {showMore ? ( <> - +

ACRE

1 an (sous conditions d'éligibilité)
- +

Déduction des charges

Oui (régime fiscal du réel) @@ -193,7 +187,7 @@ export default function SchemeComparaison({
- +

Paiement des cotisations

Mensuel
@@ -204,7 +198,7 @@ export default function SchemeComparaison({
Mensuel ou trimestriel
- +

Contrats prévoyance et retraite facultatives déductibles

@@ -218,7 +212,7 @@ export default function SchemeComparaison({
Non
- +

Paiement de cotisations minimales

@@ -230,7 +224,7 @@ export default function SchemeComparaison({
Non
- +

Revenu minimum pour l'ouverture des droits aux prestations

@@ -241,7 +235,7 @@ export default function SchemeComparaison({
Oui
{!hideAutoEntrepreneur && ( - +

Plafond de chiffre d'affaires

Non @@ -255,7 +249,7 @@ export default function SchemeComparaison({
)} - +

Gestion comptable, sociale, juridique...

@@ -273,7 +267,7 @@ export default function SchemeComparaison({
) : ( - +
- +

Indemnités journalières{' '} (en cas d'arrêt maladie) @@ -559,7 +553,7 @@ export default function SchemeComparaison({

- + Créer mon entreprise en tant que :

@@ -572,7 +566,7 @@ export default function SchemeComparaison({ !hideAutoEntrepreneur && dispatch(isAutoentrepreneur(false)) }} > - + Assimilé salarié @@ -586,11 +580,11 @@ export default function SchemeComparaison({ }} > {hideAssimiléSalarié ? ( - + Entreprise individuelle ) : ( - Indépendant + Indépendant )} {!hideAutoEntrepreneur && ( @@ -602,7 +596,7 @@ export default function SchemeComparaison({ dispatch(isAutoentrepreneur(true)) }} > - + Auto-entrepreneur diff --git a/source/components/SimulateurWarning.tsx b/source/components/SimulateurWarning.tsx index 84a4cc026..74b6fb798 100644 --- a/source/components/SimulateurWarning.tsx +++ b/source/components/SimulateurWarning.tsx @@ -25,14 +25,14 @@ export default function SimulateurWarning({

{emoji('🚩 ')} - Avant de commencer... + Avant de commencer... {' '} {folded && ( )}

@@ -45,7 +45,7 @@ export default function SimulateurWarning({ {simulateur == '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({
  • - + 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' && (
  • - + Les calculs sont indicatifs et ne se substituent pas aux décomptes réels des Urssaf, impots.gouv.fr, ou autres. @@ -80,7 +80,7 @@ export default function SimulateurWarning({ {simulateur === '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({
  • - + Ce simulateur permet d'estimer le montant de vos cotisations pour l'année 2020 à partir de votre revenu projeté diff --git a/source/components/Simulation.tsx b/source/components/Simulation.tsx index c7396602f..98c5e4510 100644 --- a/source/components/Simulation.tsx +++ b/source/components/Simulation.tsx @@ -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 ? ( - + Affinez la simulation en répondant aux questions : @@ -64,7 +62,7 @@ export default function Simulation({
    + Êtes-vous satisfait de ce simulateur ? } diff --git a/source/components/TargetSelection.tsx b/source/components/TargetSelection.tsx index c9497ca38..1035b5da4 100644 --- a/source/components/TargetSelection.tsx +++ b/source/components/TargetSelection.tsx @@ -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() { {formatCurrency(aides.nodeValue, language)} - AnimatedTargetValue> + {' '} d'aides {emoji(aides.explanation.icons)}
  • - ) + ) } diff --git a/source/components/conversation/Conversation.tsx b/source/components/conversation/Conversation.tsx index e9544f9d3..defec9254 100644 --- a/source/components/conversation/Conversation.tsx +++ b/source/components/conversation/Conversation.tsx @@ -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) {

    {emoji('🌟')}{' '} - + Vous avez complété cette simulation {' '}

    @@ -88,7 +84,7 @@ export default function Conversation({ customEndMessages }: ConversationProps) { {customEndMessages ? ( customEndMessages ) : ( - + Vous avez maintenant accès à l'estimation la plus précise possible. )} diff --git a/source/engine/rules.js b/source/engine/rules.js index bf7b88bc4..a22d8c500 100644 --- a/source/engine/rules.js +++ b/source/engine/rules.js @@ -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(' = ')) || diff --git a/source/engine/units.ts b/source/engine/units.ts index cd00d15c3..870c72005 100644 --- a/source/engine/units.ts +++ b/source/engine/units.ts @@ -112,7 +112,7 @@ export let inferUnit = ( return undefined } -export let removeOnce = ( +export let removeOnce = ( element: T, eqFn: (a: T, b: T) => boolean = equals ) => (list: Array): Array => { diff --git a/source/locales/.gitignore b/source/locales/.gitignore new file mode 100644 index 000000000..e83496337 --- /dev/null +++ b/source/locales/.gitignore @@ -0,0 +1 @@ +static-analysis-fr.json \ No newline at end of file diff --git a/source/locales/en.yaml b/source/locales/en.yaml index 0c1e58bab..6994766e0 100644 --- a/source/locales/en.yaml +++ b/source/locales/en.yaml @@ -1,3 +1,6 @@ +'404': + message: This page does not exist or no longer exists + action: Return to safe place previousSimulationBanner: info: Your previous simulation data have been saved. retrieveButton: Retrieve my last simulation @@ -5,10 +8,10 @@ Modifier: Modify Échap: Esc Entrée: Enter Plein écran: Fullscreen -Oui: Yes -oui: yes -Non: No -non: no +Oui: 'Yes' +oui: 'yes' +Non: 'No' +non: 'no' déplier: show more replier: show less Pages associées: Related pages @@ -65,9 +68,15 @@ Cotisations: Contributions Revenu disponible: Disposable income Impôts: Taxes payslip: - notice: This simulation helps you understand your French payslip, but it should not be used as one. For further details, check <1>service-public.fr (French). + notice: >- + This simulation helps you understand your French payslip, but it should not + be used as one. For further details, check <1>service-public.fr + (French). heures: 'Hours worked per month: ' - disclaimer: It takes into account national law but not union negotiated rules. Lots of financial aids for your enterprise exist, explore them on <1>aides-entreprises.fr (French). + disclaimer: >- + It takes into account national law but not union negotiated rules. Lots of + financial aids for your enterprise exist, explore them on + <1>aides-entreprises.fr (French). repartition: Distribution of total amount A quoi servent mes cotisations ?: What's included in my contributions? Effacer: Reset @@ -95,15 +104,20 @@ simulation-end: hiring: text: You can now turn your hiring project into reality. cta: Know the procedures + cta: Know the steps to take feedback: simulator: Do you like this simulator ? reportError: Make a suggestion question: Was this page useful to you? bad: form: - headline: Your feedback is valuable to us in order to continuously improve this site. What should we work on to better meet your expectations? + headline: >- + Your feedback is valuable to us in order to continuously improve this + site. What should we work on to better meet your expectations? email: Your email (if you would like an answer from us) - thanks: Thank for your feedback! You can contact us directly at <1> <2>contact@mon-entreprise.beta.gouv.fr + thanks: >- + Thank for your feedback! You can contact us directly at <1> + <2>contact@mon-entreprise.beta.gouv.fr Janvier 2019: January 2019 en incluant: including d'aides: of aid @@ -112,33 +126,28 @@ Retour: Back Retour à mon activité: Back to my business Retour à la création: Back to creation Voir les autres simulateurs: See the other simulators - legalNotice: title: Legal notice editeur: title: Publisher content: > - Incubator of digital services,<1> - Direction interministérielle du numérique et du système - d'information et de communication de l'Etat (DINSIC),<3> - Services of the Prime Minister + Incubator of digital services,<1> Direction interministérielle du + numérique et du système d'information et de communication de l'Etat + (DINSIC),<3> Services of the Prime Minister publication: title: Director of publication - content: M. Yann-Gaël Amghar, Director of Acoss + content: 'M. Yann-Gaël Amghar, Director of Acoss' hosting: title: Hosting provider content: > - Netlify, <1> - 610 22nd Street, Suite 315, <3> - San Francisco, CA 94107 <5> - Website : <7>https://www.netlify.com + Netlify, <1> 610 22nd Street, Suite 315, <3> San Francisco, CA + 94107 <5> Website : <7>https://www.netlify.com contact: title: Contact - content: > + content: | <0> contact@mon-entreprise.beta.gouv.fr - La somme de: This rule is the sum of Si: If Sinon: Else @@ -151,116 +160,182 @@ Au-dessus de: Above Taux moyen: Average rate Commencer: Get started Passer: Skip - entreprise: page: autoEntrepreneur: - description: A complete todo list to help you become {{autoEntrepreneur}} in France.` - titre: How to become {{autoEntrepreneur}} + description: 'A complete todo list to help you become {{autoEntrepreneur}} in France.`' + titre: 'How to become {{autoEntrepreneur}}' entreprise: - description: A complete todo list to help you create a {{status}} with the French administration.` - titre: Create an {{status}} + description: >- + A complete todo list to help you create a {{status}} with the French + administration.` + titre: 'Create an {{status}}' tâches: nom: titre: Find a corporate name - description: | - <0><0>The corporate name ("dénomination sociale") is the legal name of your company, written on all of your administrative papers. It can be different from the trade name (used for commercial purpose). - <1>It is advisable to check that the name is available, i.e. that it does not infringe a name already protected by a trademark, a company name, a trade name, an Internet domain name, etc. You can check on the <2>INPI database. + description: > + <0><0>The corporate name ("dénomination sociale") is the legal name + of your company, written on all of your administrative papers. It can be + different from the trade name (used for commercial purpose). + + <1>It is advisable to check that the name is available, i.e. that it + does not infringe a name already protected by a trademark, a company + name, a trade name, an Internet domain name, etc. You can check on the + <2>INPI database. formeJuridique: titre: Choose the legal status objetSocial: titre: Write the corporate purpose of the company - description: The <1>corporate purpose of the company ("objet social") is the main activity run. A secondary activity can be registered. + description: >- + The <1>corporate purpose of the company ("objet social") is the main + activity run. A secondary activity can be registered. adresse: titre: Find an address to incorporate the company - description: <0><0>The address is the physical space where your company will be incorporated. In certain places and situations, you can benefit from substantial public financing (exemption from charges, taxes, etc.). <2>More information (Fr) + description: >- + <0><0>The address is the physical space where your company will be + incorporated. In certain places and situations, you can benefit from + substantial public financing (exemption from charges, taxes, etc.). + <2>More information (Fr) statuts: titre: Write the company's articles exemple: Example articles for your - description: The company's articles of association ( "les statuts"), is an official document written in French, describing the status choice, naming the associate(s) and the contributed capital. <2>For more than one associate, it is recommended to ask for the help of a lawyer to write them. + description: >- + The company's articles of association ( "les statuts"), is an official + document written in French, describing the status choice, naming the + associate(s) and the contributed capital. <2>For more than one + associate, it is recommended to ask for the help of a lawyer to write + them. banque: titre: Open a business bank account description: - 1: The purpose of a <1>professional bank account is to separate your company's assets from your personal assets. - 2: 'The professional bank account allows you to:' - EI: If its opening is not obligatory for an EI, it is strongly recommended. - liste: | - <0>Differentiate your private and professional operations and simplify your cash management + '1': >- + The purpose of a <1>professional bank account is to separate your + company's assets from your personal assets. + '2': 'The professional bank account allows you to:' + EI: >- + If its opening is not obligatory for an EI, it is strongly + recommended. + liste: > + <0>Differentiate your private and professional operations and simplify + your cash management + <1>Facilitate any tax audit operations. capital: titre: Deposit capital funds - description: <0>The <1>deposit of share capital must be made at the time of the incorporation of a company by any person acting on behalf of the company and having received funds from contributions in cash (sum of money) from the creditors of the company (shareholder or partner).<1>The deposit consists of a transfer of a sum of money to a blocked account with a bank or the public <2>Caisse des dépôts et consignations or a notary, who must then provide a certificate of deposit of capital. + description: >- + <0>The <1>deposit of share capital must be made at the time of the + incorporation of a company by any person acting on behalf of the company + and having received funds from contributions in cash (sum of money) from + the creditors of the company (shareholder or partner).<1>The deposit + consists of a transfer of a sum of money to a blocked account with a + bank or the public <2>Caisse des dépôts et consignations or a + notary, who must then provide a certificate of deposit of capital. journal: titre: Publish a notice of creation in a newspaper - description: | - <0>A notice of incorporation of the company must be published in a newspaper of legal announcements (« JAL » in French), for a cost of publication that depends on the size of the announcement and the rates charged by the chosen newspaper.<1><0>Find a newspaper of legal announcements<2>The notice must contain the following information: + description: > + <0>A notice of incorporation of the company must be published in a + newspaper of legal announcements (« JAL » in French), for a cost of + publication that depends on the size of the announcement and the rates + charged by the chosen newspaper.<1><0>Find a newspaper of legal + announcements<2>The notice must contain the following + information: + <3> + <0>The company's name and possibly its acronym + <1>The legal form + <2>The amount of the company's capital + <3>The address of the registered office + <4>The corporate purpose + <5>The duration of the company + <6> The full name and address of the manager and of the persons with general authority to bind the company to third parties, and of the statutory auditors (if appointed) + <7> The place and number of the RCS with which the company is registered - + formulaire: titre: Register my company online - description: <0>You can start your online registration process anytime, save it and come back to it as you wish.<1><0>Start registration process + description: >- + <0>You can start your online registration process anytime, save it and + come back to it as you wish.<1><0>Start registration process titre2: Recommended before starting your activity comptable: titre: Choose a certified accountant - description: Managing a company brings a number of <1>accounting obligations. It is advisable to call in a competent person or use a website that can handle accounting for you. + description: >- + Managing a company brings a number of <1>accounting obligations. It + is advisable to call in a competent person or use a website that can + handle accounting for you. assurance: titre: Check out the need for professional insurance - description: <0>An SME or self-employed person must protect themselves against the main risks to which they are exposed and take out guarantee contracts. Whether it is a tenant or owner of its walls, the company must insure its buildings, its professional equipment, its goods, its raw materials, its vehicles, as well as in terms of civil liability of the company and its managers or in terms of operating loss.<1>More information (Fr) + description: >- + <0>An SME or self-employed person must protect themselves against the + main risks to which they are exposed and take out guarantee contracts. + Whether it is a tenant or owner of its walls, the company must insure + its buildings, its professional equipment, its goods, its raw materials, + its vehicles, as well as in terms of civil liability of the company and + its managers or in terms of operating loss.<1>More information + (Fr) affectation: titre: Make a declaration of asset allocation - description: > + description: | <0> The <1>declaration of asset allocation allows you to separate professional assets from your personal assets, which then becomes unseizable. This procedure is free of charge if it is carried out at the time of the creation of a company. - - <1> + <1> To do so, simply declare which assets are allocated to the patrimony of your company. All the contributions necessary for your professional activity must be included (for example: goodwill, trademark, patent, or professional equipment). You can do the valuation of the asset yourself if it does not exceed €30,000. - - <2> + <2> <0>$t(Plus d'informations) - avancement: Use these lists to track down your advancement in the business creation process. It is automatically saved in your browser. + avancement: >- + Use these lists to track down your advancement in the business creation + process. It is automatically saved in your browser. titre: The to-do list for creating your business retour: Choose another status ressources: simu: - indépendant: | + indépendant: > <0>Independent: contribution simulator - <1>Simulate the amount of your social security contributions to prepare your business plan. - assimilé: | - <0>Assimilé-salarié: contribution simulator - <1>Simulate the amount of your social security contributions to prepare your business plan. - autoEntrepreneur: | - <0>Auto-entrepreneur: income simulator - <1>Simulate the amount of your social security contributions and taxes and estimate your future net income. - après: | - <0>After registration - <1>SIREN, SIRET, code APE, KBis. A small glossary of terms that you may (possibly) encounter after creation. + <1>Simulate the amount of your social security contributions to prepare + your business plan. + assimilé: > + <0>Assimilé-salarié: contribution simulator + + <1>Simulate the amount of your social security contributions to prepare + your business plan. + autoEntrepreneur: > + <0>Auto-entrepreneur: income simulator + + <1>Simulate the amount of your social security contributions and taxes + and estimate your future net income. + après: > + <0>After registration + + <1>SIREN, SIRET, code APE, KBis. A small glossary of terms that you may + (possibly) encounter after creation. créer: titre: Create a company - description: Before starting the administrative procedures to create your company, you must choose a legal status adapted to your activity + description: >- + Before starting the administrative procedures to create your company, you + must choose a legal status adapted to your activity warningPL: 'Note: the case of regulated liberal professions is not covered' cta: default: Find the right status @@ -269,184 +344,278 @@ créer: listeStatuts: | <0>List of legal statuses <1>EURL, SARL, SASU, etc: a shortcut if you already know your status - comparaison: | + comparaison: > <0> SASU, EURL or auto-entrepreneur? - <1>Discover the differences in terms of income, contributions, retirement, etc. - autoEntrepreneur: <0>Become auto-entrepreneur - <1>Go to the simplified creation process for starting a business + <1>Discover the differences in terms of income, contributions, retirement, + etc. + autoEntrepreneur: >- + <0>Become auto-entrepreneur <1>Go to the simplified creation process + for starting a business gérer: titre: Manage my business - description: Do you want to earn an income or hire? You will have to pay contributions and taxes. Anticipate their amounts thanks to simulators adapted to your situation. + description: >- + Do you want to earn an income or hire? You will have to pay contributions + and taxes. Anticipate their amounts thanks to simulators adapted to your + situation. cta: Find my company choix: titre: What do you want to do? - embauche: | + embauche: > <0>Estimate the amount spent for hiring - <1>Calculate how much your company will have to spend to pay your next employee - revenus: | + + <1>Calculate how much your company will have to spend to pay your next + employee + revenus: > <0>Calculate my net income - <1>Estimate precisely the amount of your contributions thanks to the URSSAF simulator for {{régime}} + + <1>Estimate precisely the amount of your contributions thanks to the + URSSAF simulator for {{régime}} ressources: - embaucher: | + embaucher: > <0>Discover the hiring process - <1>The list of things to do to make sure you don't forget anything when hiring a new employee - sécuritéSociale: <0>Understanding social security - <1>What are social security contributions used for? Update on the social protection system enjoyed by all workers in France - autoEntrepreneur: <0>Access the official auto-entrepreneur website - <1>You will be able to make your turnover declaration, pay your contributions, and more widely find all the information relating to the status of auto-entrepreneur + + <1>The list of things to do to make sure you don't forget anything when + hiring a new employee + sécuritéSociale: >- + <0>Understanding social security <1>What are social security + contributions used for? Update on the social protection system enjoyed by + all workers in France + autoEntrepreneur: >- + <0>Access the official auto-entrepreneur website <1>You will be able + to make your turnover declaration, pay your contributions, and more widely + find all the information relating to the status of auto-entrepreneur entreprise: auto: Are you auto-entrepreneur? - dirigeant: | + dirigeant: > <0>Are you the majority director? - <1>If you are a majority director or a member of a majority board of directors, you will not have the same social security system as if you are a minority. + + <1>If you are a majority director or a member of a majority board of + directors, you will not have the same social security system as if you are + a minority. majoritaire: Majority director minoritaire: Minority director changer: Change the selected company - sécu: titre: Social security in France - contenu: | + contenu: > <0> Social protection - <1>In France, all workers benefit from quality social protection. This mandatory system is based on solidarity and aims to ensure the <2>general well-being of the population. - <2>In return for the payment of <2>social security contributions, the contributor is covered for illness, accidents at work, unemployment or retirement. + <1>In France, all workers benefit from quality social protection. This + mandatory system is based on solidarity and aims to ensure the <2>general + well-being of the population. + + <2>In return for the payment of <2>social security contributions, the + contributor is covered for illness, accidents at work, unemployment or + retirement. + page: + titre: Social Security Mon entreprise: My company Mon revenu: My income - formeJuridique: titre: Choice of legal status - EI: Also called company in own name or company in a personal name. No capital contribution is necessary. Private wealth and corporate wealth are one. - EIRL: Allows you to protect your personal assets by allocating specific capital to your professional activity. Society and the individual are the same person. Not suitable if the sole shareholder is a legal entity (company) or if you plan to welcome other shareholders during the development of your company (choose EURL in this case). - EURL: The company has only one partner. Liability is limited to the amount of the capital contribution of the sole shareholder. Evolves into a SARL when new partners join the company. - SARL: Composed of at least 2 partners whose financial responsibility is limited to the amount of their contribution to the company's capital. The minimum capital is freely fixed in the articles of association. - SAS: Company with at least 2 partners. The financial liability of the shareholders is limited to the amount of their contribution to the company's capital. The minimum capital is freely set in the Articles of Association. An SAS is characterised by a high degree of flexibility in terms of functioning (tailor-made statutes). - SASU: Composed of only one partner. The financial responsibility is limited to the amount of his contribution to the company's capital. The minimum capital is freely fixed in the Articles of Association. - SA: Composed of at least 2 shareholders. This is the only status that allows you to be listed on the stock exchange (from 7 shareholders). The minimum share capital is €37.000. - SNC: The liability of the partners for the debts of the company is unified (one partner only can be sued for the entire debt) and indefinite (responsible on the entirety of their personnal wealth). - micro: The auto-entrepreneur is a sole proprietorship company, subject to a flat-rate scheme for the calculation of taxes and the payment of social security contributions. - micro-EIRL: The EIRL auto-entrepreneur is a sole proprietorship with limited liability, subject to a flat-rate scheme for the calculation of taxes and the payment of social security contributions. - + EI: >- + Also called company in own name or company in a personal name. No capital + contribution is necessary. Private wealth and corporate wealth are one. + EIRL: >- + Allows you to protect your personal assets by allocating specific capital to + your professional activity. Society and the individual are the same person. + Not suitable if the sole shareholder is a legal entity (company) or if you + plan to welcome other shareholders during the development of your company + (choose EURL in this case). + EURL: >- + The company has only one partner. Liability is limited to the amount of the + capital contribution of the sole shareholder. Evolves into a SARL when new + partners join the company. + SARL: >- + Composed of at least 2 partners whose financial responsibility is limited to + the amount of their contribution to the company's capital. The minimum + capital is freely fixed in the articles of association. + SAS: >- + Company with at least 2 partners. The financial liability of the + shareholders is limited to the amount of their contribution to the company's + capital. The minimum capital is freely set in the Articles of Association. + An SAS is characterised by a high degree of flexibility in terms of + functioning (tailor-made statutes). + SASU: >- + Composed of only one partner. The financial responsibility is limited to the + amount of his contribution to the company's capital. The minimum capital is + freely fixed in the Articles of Association. + SA: >- + Composed of at least 2 shareholders. This is the only status that allows you + to be listed on the stock exchange (from 7 shareholders). The minimum share + capital is €37.000. + SNC: >- + The liability of the partners for the debts of the company is unified (one + partner only can be sued for the entire debt) and indefinite (responsible on + the entirety of their personnal wealth). + micro: >- + The auto-entrepreneur is a sole proprietorship company, subject to a + flat-rate scheme for the calculation of taxes and the payment of social + security contributions. + micro-EIRL: >- + The EIRL auto-entrepreneur is a sole proprietorship with limited liability, + subject to a flat-rate scheme for the calculation of taxes and the payment + of social security contributions. Votre forme juridique: Your legal status Créer une: Create a Devenir: Become Choisir la forme juridique: Choose your legal status - responsabilité: page: titre: Choose between Sole Proprietorship and Limited Liability Company in France titre: Limited liability company or sole proprietorship - description: Sole proprietorship or limited liability? Each option has legal implications, and leads to a different status for creating your company in France - intro: This choice determines your degree of responsibility and your ability to welcome new partners in the future - entreprise-individuelle: | + description: >- + Sole proprietorship or limited liability? Each option has legal + implications, and leads to a different status for creating your company in + France + intro: >- + This choice determines your degree of responsibility and your ability to + welcome new partners in the future + entreprise-individuelle: > <0>Sole proprietorship: - An economic activity carried out by a single natural person in his or her own name. Less formalities, but more risks in the event of bankruptcy, because your personal assets can be put to use. + + An economic activity carried out by a single natural person in his or her + own name. Less formalities, but more risks in the event of bankruptcy, + because your personal assets can be put to use. + <3>You cannot welcome new partners into a sole proprietorship. - société: | + société: > <0>Limited liability company: - You cannot be held personally liable for the company's debts or obligations. On the other hand, the creation process is a little more cumbersome, since it includes the drafting of statutes and the deposit of capital. + + You cannot be held personally liable for the company's debts or obligations. + On the other hand, the creation process is a little more cumbersome, since + it includes the drafting of statutes and the deposit of capital. bouton1: Limited liability company bouton2: Sole proprietorship - autoentrepreneur: page: titre: Auto-entrepreneur - description: | - The auto-entrepreneur benefits from a simplified scheme of declaration and payment, + description: > + The auto-entrepreneur benefits from a simplified scheme of declaration and + payment, + for which tax and social contributions are based on the turnover achieved - each month. It's an interesting choice if you do not need a lot of capital, and want to get started quickly. + + each month. It's an interesting choice if you do not need a lot of + capital, and want to get started quickly. titre: Auto-entrepeneur - description: > + description: | <0> The auto-entrepreneur benefits from a simplified scheme of declaration and payment, for which tax and social contributions are based on the turnover achieved each month. - - <1> + <1> <0>Note: Some activities are excluded from this status (<2>see the list [fr]). Some activities are regulated with a qualification or a professional experience (<4>see the list [fr])). - associés: page: titre: Number of partners to start a business in France - description: Find out which status to choose based on the number of partners involved in the creation of a company in France. + description: >- + Find out which status to choose based on the number of partners involved + in the creation of a company in France. titre: Number of partners - description: > + description: | <0> A company with only one partner is easier to create and manage. A shareholder may be a natural person (an individual) or a legal person (for example, another company). - - <1> + <1> Note: this choice is not final. You can start your company on your own, and welcome new partners as your business grows. choix1: Alone choix2: Several partners - trouver: page: - description: Find your existing company, and start simulate hiring cost customized to your situation + description: >- + Find your existing company, and start simulate hiring cost customized to + your situation titre: Find your company non: I don't have a company yet - description: Thanks to the SIREN database, the public information of your company will be used automatically in the next steps. + description: >- + Thanks to the SIREN database, the public information of your company will be + used automatically in the next steps. ok: Confirm and simulate hiring costs - Nous n'avons rien trouvé: We didn't find any matching registered company. Recherche en cours...: Searching... - après: titre: After registration entreprise: company - intro: Once your <2>{{companyStatusChoice}} has been successfully registered, you'll have access to the following + intro: >- + Once your <2>{{companyStatusChoice}} has been successfully registered, + you'll have access to the following siret: titre: The SIRET number - description: The SIREN number <1>identifies your company while the SIRET number identifies each place of business operated by the same company. The SIRET is composed by the SIREN followed by the establishment number (NIC). + description: >- + The SIREN number <1>identifies your company while the SIRET number + identifies each place of business operated by the same company. The SIRET + is composed by the SIREN followed by the establishment number (NIC). ape: titre: The APE code - description: The APE code corresponds to the <1>business sector of your company. The APE classifies your company’s main operations in relation to the French business nomenclature system (« NAF » code). <3>It also determines the applicable collective agreement, and hints at the industrial accident rate of contribution that the company will have to pay for each hire. + description: >- + The APE code corresponds to the <1>business sector of your company. + The APE classifies your company’s main operations in relation to the + French business nomenclature system (« NAF » code). <3>It also determines + the applicable collective agreement, and hints at the industrial accident + rate of contribution that the company will have to pay for each hire. kbis: titre: The Kbis description: - 1: It is the official document attesting to <2>the legal existence of a commercial enterprise. In most cases, to be opposable and authentic for administrative procedures, the extract must be less than 3 months old. - 2: This document is generally requested when applying for a public tender, opening a professional bank account, purchasing professional equipment from distributors, etc. - + '1': >- + It is the official document attesting to <2>the legal existence of a + commercial enterprise. In most cases, to be opposable and authentic + for administrative procedures, the extract must be less than 3 months + old. + '2': >- + This document is generally requested when applying for a public tender, + opening a professional bank account, purchasing professional equipment + from distributors, etc. actions: retour: Creation checklist avance: Go to social security - Protection sociale: Social security Rémunération du dirigeant: Director's remuneration Simulateur de salaire: Employee salary simulation Exemples de simulation de salaire: Examples of salary simulations Quelques exemples de salaires: Some salary exemples Embauche: Hiring process - listeformejuridique: page: titre: Legal status list for creating your company in France statut du dirigeant: page: - description: This choice is important because it determines the director's Social Security scheme and coverage. Each option has legal implications, and leads to a different status when creating your company in France + description: >- + This choice is important because it determines the director's Social + Security scheme and coverage. Each option has legal implications, and + leads to a different status when creating your company in France titre: Defining the director's status - + description: >- + <0>This choice is important because it determines the social security regime + and the social coverage of the manager. The amount and terms of payment of + social security contributions are also impacted.<1><0> gérant minoritaire: page: - description: Some special rules apply depending on the amount of shares owned by the director and this can lead to a different status when creating your company in France + description: >- + Some special rules apply depending on the amount of shares owned by the + director and this can lead to a different status when creating your + company in France titre: Chairman or managing director in France titre: Chairman or managing director description: > - <0>Some special rules apply depending on the amount of shares owned by the director.<1><0><0>Chairman: The director is in majority, or is part of a managing board that is in majority.<1><0>Managing director: The director is in minority (or equality), or is part of a managing board that is in minority (or equality). + <0>Some special rules apply depending on the amount of shares owned by the + director.<1><0><0>Chairman: The director is in majority, or is part + of a managing board that is in majority.<1><0>Managing director: The + director is in minority (or equality), or is part of a managing board that + is in minority (or equality). Gérant majoritaire: Chairman Gérant minoritaire: Managing director - Plus d'informations: More information (fr) - embauche: tâches: page: - titre: > + titre: | Hiring procedure in France description: All the necessary steps to hire your first employee in France. titre: Hiring process checklist @@ -456,14 +625,14 @@ embauche: dpae: titre: Declare your hiring t o the social administration description: > - This can be done through the form called DPAE, must be completed - within 8 days before any hiring, and can <2>be done online (Fr) + This can be done through the form called DPAE, must be completed within + 8 days before any hiring, and can <2>be done online (Fr) logiciel de paie: titre: Choose a payslip software description: > - With fewer than 20 employees, payslips and declarations can be - handled online by the <2> Tese (Fr), a tool developped by the french - social administration. You can also use <5>a private payslip software (Fr) + With fewer than 20 employees, payslips and declarations can be handled + online by the <2> Tese (Fr), a tool developped by the french social + administration. You can also use <5>a private payslip software (Fr) registre: titre: Keep an updated staff register pension: @@ -473,85 +642,76 @@ embauche: titre: Pick a private complementary health insurance description: > You must cover your employees with the private complementary health - insurance ("complémentaire santé" or colloquially "mutuelle" in - French) of your choice as long as it provides a set of minimum - guarantees. The employer must pay at least half of the package. + insurance ("complémentaire santé" or colloquially "mutuelle" in French) + of your choice as long as it provides a set of minimum guarantees. The + employer must pay at least half of the package. medecine: titre: Register to a work medicine office description: Don't forget to plan an initial appointment for each new hire. - chaque mois: > - <0>Then each month - <1> + chaque mois: | + <0>Then each month <1> <0>Compute the individual social contributions (using the chosen payslip software) <1>Declare the contributions through the DSN, the new online declaration system <2>Deliver the standardised payslip to your employee - - <2>Get an example payslip - + <2>Get an example payslip Guide du statut juridique: Legal status guide Démarches de création: Creation process checklist - path: créer: - index: '/create' - après: '/after-registration' + index: /create + après: /after-registration guideStatut: - index: '/legal-status' - liste: '/list' - gérantMinoritaire: '/chairman-or-managing-director' - responsabilité: '/liability' - statutDirigeant: '/director' - nombreAssociés: '/multiple-associates' - autoEntrepreneur: '/auto-entrepreneur' + index: /legal-status + liste: /list + gérantMinoritaire: /chairman-or-managing-director + responsabilité: /liability + statutDirigeant: /director + nombreAssociés: /multiple-associates + autoEntrepreneur: /auto-entrepreneur gérer: - index: '/manage' - embaucher: '/hiring' - sécuritéSociale: '/social-security' + index: /manage + embaucher: /hiring + sécuritéSociale: /social-security simulateurs: index: /simulators - assimilé-salarié: '/assimile-salarie' - indépendant: '/independant' - auto-entrepreneur: '/auto-entrepreneur' - salarié: '/salaried' - comparaison: '/social-scheme-comparaison' + assimilé-salarié: /assimile-salarie + indépendant: /independant + auto-entrepreneur: /auto-entrepreneur + salarié: /salaried + comparaison: /social-scheme-comparaison + artiste-auteur: /artist-author documentation: - exemples: '/examples' + exemples: /examples + index: /documentation integration: - index: '/integration' - iframe: '/iframe' - library: '/library' - + index: /integration + iframe: /iframe + library: /library économieCollaborative: - index: '/sharing-economy' - votreSituation: '/your-situation' - + index: /sharing-economy + votreSituation: /your-situation + nouveautés: /What's new Auto-entrepreneur en EIRL: Auto-entrepreneur with EIRL option auto-entrepreneur-EIRL: auto-entrepreneur-EIRL -privacyContent: > - <0>$t(Vie privée) - <1> +privacyContent: | + <0>$t(Vie privée) <1> We do not store any personal data on our servers. All the information you provide (salaries, company postal code, SIREN etc.) is saved only on your browser. No one else can have access to it but you. - - <2> + <2> However, we do collect anonymous statistics on site usage, which we use for the sole purpose of improving the service, in accordance with the <2>recommendations of the CNIL and the DPRG directive. - - <3>You can opt out below. + <3>You can opt out below. Vie privée: Privacy - Recommencer: Start again Plusieurs associés: Several partners Un seul associé: Only one partner Responsabilité limitée: Limited liability Sans responsabilité limitée: Without limited liability Pas en auto-entrepreneur: Not in auto-entrepreneur - Précédent: Previous Choisir plus tard: Choose later - mois: month heures: hours heure: hour @@ -559,53 +719,64 @@ année: year an: year par: per Explorez notre documentation: Explore our documentation - maj2019: The simulation is up-to-date in 2019. siteName: My company in France - Faire une simulation: Launch a simulation Exemples: Examples Intégrer nos simulateurs: Integrate our simulators Intégrer l'interface de simulation: Integrate the simulation interface Intégrer la bibliothèque de calcul: Integrate the calculation library - landing: title: The official assistant for entrepreneurs - subtitle: All the resources you need to develop your business, from legal status to hiring. + subtitle: >- + All the resources you need to develop your business, from legal status to + hiring. choice: - create: <0>Create a company<1>Assistance in choosing the status and the complete list of creation steps - manage: <0>Manage my business<1>Simulators to anticipate the amount of contributions and better manage your cash flow - declare: <0>What income should I declare?<1>How to report your income from online platforms (AirBnb, leboncoin, blablacar, etc.) + create: >- + <0>Create a company<1>Assistance in choosing the status and the + complete list of creation steps + manage: >- + <0>Manage my business<1>Simulators to anticipate the amount of + contributions and better manage your cash flow + declare: >- + <0>What income should I declare?<1>How to report your income from + online platforms (AirBnb, leboncoin, blablacar, etc.) seeSimulators: See the simulators list - aboutUs: | + aboutUs: > <0>About us - <1>This website is developed by the administration to <2>support entrepreneurs in the development of their business. - <2>We start from the premise that it is difficult to navigate through all the online documentation: there is a lack of clear, up-to-date and relevant information on starting a business. - <3>Our objective is to <2>remove all uncertainties regarding the administration tasks so that you can focus on what matters: your business. - <4>We are a small, autonomous and multidisciplinary team within the <4>URSSAF. We are committed to being as close as possible to our users in order to continuously improve this site in accordance with the <7>Startup d'État method. - <5>Feel free to send us your comments and suggestions at <2>contact@mon-entreprise.beta.gouv.fr . + <1>This website is developed by the administration to <2>support + entrepreneurs in the development of their business. + + <2>We start from the premise that it is difficult to navigate through all + the online documentation: there is a lack of clear, up-to-date and relevant + information on starting a business. + + <3>Our objective is to <2>remove all uncertainties regarding the + administration tasks so that you can focus on what matters: your + business. + + <4>We are a small, autonomous and multidisciplinary team within the + <4>URSSAF. We are committed to being as close as possible to our users + in order to continuously improve this site in accordance with the <7>Startup + d'État method. + + <5>Feel free to send us your comments and suggestions at + <2>contact@mon-entreprise.beta.gouv.fr . À quoi servent mes cotisations ?: How are my contributions distributed? Accueil: Home - -404: - message: This page does not exist or no longer exists - action: Return to safe place - newsletter: register: titre: Stay informed - description: | - Subscribe to our monthly newsletter to receive <2>official advice on starting a business and access new features in advance. + description: > + Subscribe to our monthly newsletter to receive <2>official advice on + starting a business and access new features in advance. S'inscrire: Register Votre adresse e-mail: Your email address - Renseigner mon entreprise: Find my company Simulations personnalisées: Customized simulations - indicationTempsPlein: in full-time gross salary equivalent auto-entreprise: auto-enterprise - simulateurs: accueil: titre: Available simulators @@ -618,32 +789,46 @@ simulateurs: auto: | <0>Auto-entrepreneur <1>Calculate the income (or turnover) of an auto-entrepreneur - salarié: | + salarié: > <0>Employee - <1>Calculate the net, gross, or total salary of an employee, trainee, or similar - comparaison: | - <0>Status comparison - <1>Simulate the differences between the plans (contributions, retirement, maternity, illness, etc.) - description: <0>All the simulators on this site are: - <1><0>Maintained with the latest legislation - <1>Continuously improved to increase the number of devices taken into account - <2>Developed in partnership with the Urssaf (the contribution collector entity in France)<2> - - inversionFail: The amount entered is too small or results in an impossible situation, try another one + <1>Calculate the net, gross, or total salary of an employee, trainee, or + similar + comparaison: > + <0>Status comparison + + <1>Simulate the differences between the plans (contributions, retirement, + maternity, illness, etc.) + description: >- + <0>All the simulators on this site are: + + <1><0>Maintained with the latest legislation <1>Continuously improved + to increase the number of devices taken into account <2>Developed in + partnership with the Urssaf (the contribution collector entity in + France)<2> + inversionFail: >- + The amount entered is too small or results in an impossible situation, try + another one warning: titre: Before starting... plus: Read explanations - urssaf: The figures are indicative and do not replace the actual accounts of the Urssaf, impots.gouv.fr, etc - auto-entrepreneur: | - Self-employed entrepreneurs cannot deduct their expenses - from their turnover. Therefore, <3>all costs related to the business must be - deducted on a net basis to obtain the actual income received. - cfe: > + urssaf: >- + The figures are indicative and do not replace the actual accounts of the + Urssaf, impots.gouv.fr, etc + auto-entrepreneur: >- + Self-employed entrepreneurs cannot deduct their expenses from their + turnover. Therefore, <3>all costs related to the business must be deducted + on a net basis to obtain the actual income received. + artiste-auteur: >- + This estimate is proposed for information only. It is based on the + applicable regulatory elements and the elements that you have entered, but + it does not take into account your entire situation. The actual amount of + your contributions may therefore be different. + cfe: >- The simulator does not include the corporate property tax (CFE), which is due from the second year of the fiscal year. Its amount varies greatly - depending on the company's turnover and domiciliation. - <2> More info. + depending on the company's turnover and the company's domiciliation. + <2>More info. précision: défaut: 'Refine the simulation by answering the following questions:' faible: Low accuracy @@ -652,45 +837,80 @@ simulateurs: salarié: page: titre: 'Calculation of net and gross salary: official simulator' - description: Estimate the contributions for an employee based on gross, net or "super gross" salary. All contributions from the general system and income tax are taken into account. Discover the counterparties guaranteed by social security'. + description: >- + Estimate the contributions for an employee based on gross, net or "super + gross" salary. All contributions from the general system and income tax + are taken into account. Discover the counterparties guaranteed by social + security'. titre: Income simulator for employees assimilé-salarié: page: titre: Official salary simulator for SASU and SAS directors - description: Estimate your income as a SASU or SAS director based on your turnover. All contributions and income tax are taken into account. Official URSSAF simulator + description: >- + Estimate your income as a SASU or SAS director based on your turnover. + All contributions and income tax are taken into account. Official URSSAF + simulator titre: SAS and SASU directors income simulator - explications: The equal or minority directors of SARL or the directors of SA and SAS are considered as "assimilé salarié" and are subject to the general regime. Consequently, the director has the same social protection as an employee, apart from unemployment coverage. + explications: >- + The equal or minority directors of SARL or the directors of SA and SAS are + considered as "assimilé salarié" and are subject to the general regime. + Consequently, the director has the same social protection as an employee, + apart from unemployment coverage. indépendant: page: titre: Official income simulator for self-employed person - description: Estimate your income as a self-employed person based on your turnover (for EI, EURL and SARL majority directors). All contributions and income tax are taken into account. Official URSSAF simulator + description: >- + Estimate your income as a self-employed person based on your turnover + (for EI, EURL and SARL majority directors). All contributions and income + tax are taken into account. Official URSSAF simulator titre: Self-employed income simulator - explication1: Our estimate takes into account the <1>actual contributions due by the self-employed person. During the first year of his activity, he will pay a reduced flat rate (a sum of around 1300€ / year for a craftsman benefiting from ACRE)... but it will be regularized the following year according to this real amount. - explication2: Unemployment and occupational accident insurance are not covered by the Social Security for the self-employed. Retirement based on professional income is generally lower. To be covered, the professional may take out additional insurance. + explication1: >- + Our estimate takes into account the <1>actual contributions due by the + self-employed person. During the first year of his activity, he will pay a + reduced flat rate (a sum of around 1300€ / year for a craftsman benefiting + from ACRE)... but it will be regularized the following year according to + this real amount. + explication2: >- + Unemployment and occupational accident insurance are not covered by the + Social Security for the self-employed. Retirement based on professional + income is generally lower. To be covered, the professional may take out + additional insurance. auto-entrepreneur: page: titre: Official income simulator for auto-entrepreneur - description: Estimate your income as an auto-entrepreneur based on your turnover. All contributions and income tax are taken into account. Official URSSAF simulator. - titre: 'Auto-entrepreneur income simulator' - + description: >- + Estimate your income as an auto-entrepreneur based on your turnover. All + contributions and income tax are taken into account. Official URSSAF + simulator. + titre: Auto-entrepreneur income simulator selectionRégime: page: titre: Social scheme selection titre: Which social scheme would you like to explore? comparer: titre: Not sure which one to choose? - description: The executive's social scheme has a very strong influence on the level of social protection and the perceived income. To help you see more clearly and choose the plan that suits you best, we have designed a quick comparator. + description: >- + The executive's social scheme has a very strong influence on the level of + social protection and the perceived income. To help you see more clearly + and choose the plan that suits you best, we have designed a quick + comparator. cta: Compare social schemes comparaisonRégimes: page: - titre: | - Self-employed, assimilated employee or auto-entrepreneur: discover the social scheme that best suits you - description: | - What is the best scheme for your situation? Discover their differences and simulate your income and retirement in one minute for each of the options. - titre: | - Self-employed, assimilated employee or <2>auto-entrepreneur: which scheme to choose? - description: | - When you create your company, the choice of legal status will determine to which social scheme the executive is affiliated. There are three different ones, each with its advantages and disadvantages. Thanks to this comparison, you will be able to select the one that best suits you. + titre: > + Self-employed, assimilated employee or auto-entrepreneur: discover the + social scheme that best suits you + description: > + What is the best scheme for your situation? Discover their differences and + simulate your income and retirement in one minute for each of the options. + titre: > + Self-employed, assimilated employee or <2>auto-entrepreneur: which + scheme to choose? + description: > + When you create your company, the choice of legal status will determine to + which social scheme the executive is affiliated. There are three different + ones, each with its advantages and disadvantages. Thanks to this comparison, + you will be able to select the one that best suits you. AS: tagline: The all-inclusive plan indep: @@ -699,10 +919,10 @@ comparaisonRégimes: tagline: Start without risk status: legend: Possible legal status - AS: SAS, SASU or SARL with minority director + AS: 'SAS, SASU or SARL with minority director' indep: - 1: EI, EIRL, EURL or SARL with majority director - 2: EI or EIRL + '1': 'EI, EIRL, EURL or SARL with majority director' + '2': EI or EIRL auto: Auto-entreprise sécuritéSociale: | <0> Social security @@ -728,15 +948,15 @@ comparaisonRégimes: <0>Period retraite: | <0>Retirement pay - comparaisonDétaillée: | <0><0> View more information - - comptabilité: | + comptabilité: > <0> Accounting, social, legal management.... - <1> Support strongly recommended <1>(chartered accountant, accountant, chartered management centre...) - <2> Simplified <1>(can be managed by the auto-entrepreneur) + <1> Support strongly recommended <1>(chartered accountant, accountant, + chartered management centre...) + + <2> Simplified <1>(can be managed by the auto-entrepreneur) ACRE: | <0>ACRE <1>1 year<1>(partial contribution exemption) @@ -751,10 +971,14 @@ comparaisonRégimes: <1/> <2>Start simulation - cotisations: | + cotisations: > <0> Payment of social contributions + <1> Monthly - <2> Monthly or quaterly advance <1>(with posterior regularization based on real income) + + <2> Monthly or quaterly advance <1>(with posterior regularization based on + real income) + <3> Montly or quaterly complémentaireDeductible: | <0> Optional health and pension policies deductible @@ -769,12 +993,27 @@ comparaisonRégimes: <0>Retirement pay <1>(before taxes) infobulle: - AS: Pension calculated for 172 quarters contributed to the general scheme with no change in income. - indep: Pension calculated for 172 quarters contributed to the self-employed scheme with no change in income. - auto: Pension calculated for 172 quarters contributed as auto-entrepreneur with no change in income. + AS: >- + Pension calculated for 172 quarters contributed to the general scheme + with no change in income. + indep: >- + Pension calculated for 172 quarters contributed to the self-employed + scheme with no change in income. + auto: >- + Pension calculated for 172 quarters contributed as auto-entrepreneur + with no change in income. + infobulles: + auto: >- + Pension calculated for 172 quarters of self-employed contributions with + no change in income. + indep: >- + Pension calculated for 172 quarters of contributions to the + self-employed scheme with no change in income. + AS: >- + Pension calculated for 172 quarters contributed to the general scheme + with no change in income. cotisationMinimale: | <0> Minimum contributions - seuil: | <0> Minimum income for eligibility for benefits <1>Yes @@ -782,44 +1021,54 @@ comparaisonRégimes: <3>Yes titreSelection: | Create my company as: - + choix: + AS: Assimilated employee + auto: Auto-entrepreneur + indep: Independent + EI: Sole proprietorship + trimestreValidés: <0>Number of quarters validated <1>(for retirement) J'ai compris: understood trimestres validés: validated quarters - Année d'activité: Years of activity -Commerçant, artisan, ou libéral ?: Trader, craftsman, or liberal? +'Commerçant, artisan, ou libéral ?': 'Trader, craftsman, or liberal?' Revenir à la documentation: Go back to documentation Voir le code source: See the source code Rend non applicable les règles suivantes: Makes the following rules not applicable Cette règle ne s'applique pas pour: This rule does not apply for - -pour les accidents de trajet/travail et maladie pro: for commuting accidents, work accidents and professional illness +pour les accidents de trajet/travail et maladie pro: 'for commuting accidents, work accidents and professional illness' jour: day Pas implémenté: Not implemented Votre entreprise: Your company Crée le: Created on domiciliée à: domiciled in -"Nom de l'entreprise ou SIREN ": Company name or SIREN code +'Nom de l''entreprise ou SIREN ': Company name or SIREN code Ressources utiles: Helpful resources Aucun résultat: No result$ inférieurs à: lower than supérieurs à: higher than - économieCollaborative: retourAccueil: Back to the selection of activities accueil: titre: How to declare income from digital platforms? - contenu: <0> You have revenues from online platforms (Airbnb, Abritel, Drivy, Blablacar, Leboncoin, etc.)? You must report them in most cases. However, it can be difficult to find your way around. - <1>Follow this guide to find out in a few clicks how to be in good standing. - <2>From 2020 onwards, these revenues will be automatically reported by the platforms to the tax authorities and Urssaf. + contenu: >- + <0> You have revenues from online platforms (Airbnb, Abritel, Drivy, + Blablacar, Leboncoin, etc.)? You must report them in most cases. However, + it can be difficult to find your way around. <1>Follow this guide to + find out in a few clicks how to be in good standing. <2>From 2020 + onwards, these revenues will be automatically reported by the platforms to + the tax authorities and Urssaf. question: What types of activity did you undertake? - réassurance: 'PS: this tool is only there to inform you, no data will be transmitted to the administrations' + réassurance: >- + PS: this tool is only there to inform you, no data will be transmitted to + the administrations activité: choix: What are more precisely the activities carried out? voirObligations: See my obligations - pro: | + pro: > <0>This is a professional activity - <1>The income from this activity is considered as professional income from the first euro earned. + + <1>The income from this activity is considered as professional income from + the first euro earned. impôt: | <0>You must declare your income to the tax authorities <1>Income from this activity is taxable. @@ -828,21 +1077,53 @@ supérieurs à: higher than <1>Your annual income for this activity is: exonération: question: Are you in one of the following situations? - notice: If none of these cases apply to you, you will have nothing to worry about. + notice: 'If none of these cases apply to you, you will have nothing to worry about.' obligations: titre: What do I have to do to be in good standing? - pro: <0>Declare as a professional activity - <1>Your income is considered as professional income and is subject to social security contributions. In return, they entitle you to social benefits (pension, health insurance, maternity, etc.). - entreprise: <0>With a company - <1>If you already have a declared activity, you can add this income to the company's income. You will only have to check that its corporate purpose is compatible with the activities concerned (and change it if necessary). Otherwise, you will have to start a new business. - <2>Create a company - régimeGénéral: | + pro: >- + <0>Declare as a professional activity <1>Your income is considered as + professional income and is subject to social security contributions. In + return, they entitle you to social benefits (pension, health insurance, + maternity, etc.). + entreprise: >- + <0>With a company <1>If you already have a declared activity, you can + add this income to the company's income. You will only have to check that + its corporate purpose is compatible with the activities concerned (and + change it if necessary). Otherwise, you will have to start a new + business. <2>Create a company + régimeGénéral: > <0>With the general regime option - <1>For some activities, you can declare your income directly on the Urssaf website. This is an interesting option if you do not want to create a new company or modify an existing one. In any case, you will have to declare this income for tax purposes. + + <1>For some activities, you can declare your income directly on the Urssaf + website. This is an interesting option if you do not want to create a new + company or modify an existing one. In any case, you will have to declare + this income for tax purposes. + <2>Declare to the general regime - impôts: <0>Declare your income to the tax autorities - <1>For these activities, you only need to report your income on your tax return. For more information, you can visit the <2>dedicated page on impots.gouv.fr. + impôts: >- + <0>Declare your income to the tax autorities <1>For these activities, + you only need to report your income on your tax return. For more + information, you can visit the <2>dedicated page on + impots.gouv.fr. aucune: | <0>Nothing to do <1>You do not need to report your income for these activities. régimeGénéralDisponible: General regime available +<0>Oui: <0>Yes +Assimilé salarié: Assimilated employee +back: Resume simulation +Auto-entrepreneur: Auto-entrepreneur +Entreprise Individuelle: Sole Proprietorship +Imprimer: Print +Indépendant: Independent +Part salarié: Employee share +Liste des statuts juridiques: List of legal statutes +Tout effacer: Delete all +trimestres: quarters +simlateurs: + warning: + artiste-auteur: >- + This simulator allows you to estimate the amount of your contributions for + the year 2020 based on your projected income. +impôt: tax +Revenu (incluant les dépenses liées à l'activité): Revenue (including expenses related to the activity) diff --git a/source/règles/base.yaml b/source/règles/base.yaml index 5ac81f341..b4c156786 100644 --- a/source/règles/base.yaml +++ b/source/règles/base.yaml @@ -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/ diff --git a/source/règles/externalized.yaml b/source/règles/externalized.yaml index 89c6a5737..c57429996 100644 --- a/source/règles/externalized.yaml +++ b/source/règles/externalized.yaml @@ -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 diff --git a/source/scripts/automatic-translate.js b/source/scripts/automatic-translate.js deleted file mode 100644 index 6fbe29c93..000000000 --- a/source/scripts/automatic-translate.js +++ /dev/null @@ -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) - } -}) diff --git a/source/scripts/get-missing-translations.js b/source/scripts/get-missing-translations.js deleted file mode 100644 index 1c7b65cbe..000000000 --- a/source/scripts/get-missing-translations.js +++ /dev/null @@ -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 -} diff --git a/source/scripts/i18n/check-missing-UI-translation.js b/source/scripts/i18n/check-missing-UI-translation.js new file mode 100644 index 000000000..d1f5c37b6 --- /dev/null +++ b/source/scripts/i18n/check-missing-UI-translation.js @@ -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 +`) +} diff --git a/source/scripts/check-missing-translation.js b/source/scripts/i18n/check-missing-rule-translation.js similarity index 60% rename from source/scripts/check-missing-translation.js rename to source/scripts/i18n/check-missing-rule-translation.js index 5217f16e4..51ba40201 100644 --- a/source/scripts/check-missing-translation.js +++ b/source/scripts/i18n/check-missing-rule-translation.js @@ -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` ) } diff --git a/source/scripts/i18n/translate-rules.js b/source/scripts/i18n/translate-rules.js new file mode 100644 index 000000000..85f5a2db4 --- /dev/null +++ b/source/scripts/i18n/translate-rules.js @@ -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) + } +}) diff --git a/source/scripts/i18n/translate-ui.js b/source/scripts/i18n/translate-ui.js new file mode 100644 index 000000000..42911eb60 --- /dev/null +++ b/source/scripts/i18n/translate-ui.js @@ -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) + } + }) diff --git a/source/scripts/i18n/utils.js b/source/scripts/i18n/utils.js new file mode 100644 index 000000000..f3f2c1b14 --- /dev/null +++ b/source/scripts/i18n/utils.js @@ -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 +} diff --git a/source/sites/mon-entreprise.fr/layout/Footer/Privacy.tsx b/source/sites/mon-entreprise.fr/layout/Footer/Privacy.tsx index b8c72013e..0bd0d78ed 100644 --- a/source/sites/mon-entreprise.fr/layout/Footer/Privacy.tsx +++ b/source/sites/mon-entreprise.fr/layout/Footer/Privacy.tsx @@ -31,7 +31,7 @@ export default function Privacy() { export let PrivacyContent = ({ language }: { language: string }) => ( <> - +

    Vie privée

    Nous recueillons des statistiques anonymes sur l'utilisation du site, diff --git a/source/sites/mon-entreprise.fr/pages/Créer/AfterRegistration.tsx b/source/sites/mon-entreprise.fr/pages/Créer/AfterRegistration.tsx index f856e0bf8..a76f86bd7 100644 --- a/source/sites/mon-entreprise.fr/pages/Créer/AfterRegistration.tsx +++ b/source/sites/mon-entreprise.fr/pages/Créer/AfterRegistration.tsx @@ -30,10 +30,10 @@ export default function AfterRegistration() {

    - Après la création + Après la création

    - + Une fois votre{' '} {{ statutChoisi: isAutoentrepreneur @@ -44,10 +44,10 @@ export default function AfterRegistration() {

    - Le numéro SIRET + Le numéro SIRET

    - + Le numéro SIREN est l'identifiant de votre entreprise{' '} 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() { />

    - Le code APE + Le code APE

    - + Le code APE correspond au secteur d'activité 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') && ( <>

    - Le Kbis + Le Kbis

    - + C'est le document officiel qui atteste de{' '} l'existence légale d'une entreprise commerciale. Le plus souvent, pour être valable par les procédures @@ -109,7 +109,7 @@ export default function AfterRegistration() {

    - + 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. diff --git a/source/sites/mon-entreprise.fr/pages/Créer/CreationChecklist.tsx b/source/sites/mon-entreprise.fr/pages/Créer/CreationChecklist.tsx index def4524c7..4142495f8 100644 --- a/source/sites/mon-entreprise.fr/pages/Créer/CreationChecklist.tsx +++ b/source/sites/mon-entreprise.fr/pages/Créer/CreationChecklist.tsx @@ -77,7 +77,7 @@ function CreateCompany({ onClick={onStatusChange} className="ui__ simple small push-left button" > - ← Choisir un autre statut + ← Choisir un autre statut

    @@ -88,12 +88,12 @@ function CreateCompany({

    {emoji('📋')}{' '} - + À faire pour créer votre entreprise

    - + 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={ - + Choisir la forme juridique } @@ -118,12 +118,12 @@ function CreateCompany({ + Trouver un nom d'entreprise } explanations={ - +

    La dénomination sociale est le nom de votre entreprise aux yeux de la loi, écrit sur tous vos documents @@ -145,13 +145,13 @@ function CreateCompany({ + Déterminer l'objet social } explanations={

    - + L' objet social est l'activité principale de l'entreprise. Une activité secondaire peut être enregistrée. @@ -163,12 +163,12 @@ function CreateCompany({ + Choisir une adresse pour le siège } explanations={ - +

    L'adresse est l'espace physique où votre entreprise sera incorporée. Dans certains lieux et certaines @@ -186,13 +186,13 @@ function CreateCompany({ + Écrire les statuts } explanations={

    - + 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({ + Ouvrir un compte bancaire } explanations={ <>

    - + Le but d'un compte bancaire d'entreprise est de séparer les actifs de l'entreprise des vôtres. {' '} {statut === 'EI' && ( - + Si son ouverture n'est pas obligatoire pour un IE, elle reste fortement recommandée.{' '} )} - + Le compte d'entreprise vous permet de :

    diff --git a/source/sites/mon-entreprise.fr/pages/Créer/GuideStatut/PickLegalStatus.tsx b/source/sites/mon-entreprise.fr/pages/Créer/GuideStatut/PickLegalStatus.tsx index e3dc14b72..930a2ef31 100644 --- a/source/sites/mon-entreprise.fr/pages/Créer/GuideStatut/PickLegalStatus.tsx +++ b/source/sites/mon-entreprise.fr/pages/Créer/GuideStatut/PickLegalStatus.tsx @@ -99,7 +99,7 @@ export default function SetMainStatus() {

    {Object.keys(possibleStatus).every(Boolean) ? ( - Liste des statuts juridiques + Liste des statuts juridiques ) : ( Votre forme juridique )} diff --git a/source/sites/mon-entreprise.fr/pages/Créer/GuideStatut/PreviousAnswers.tsx b/source/sites/mon-entreprise.fr/pages/Créer/GuideStatut/PreviousAnswers.tsx index b9ba83bfb..135a70b6a 100644 --- a/source/sites/mon-entreprise.fr/pages/Créer/GuideStatut/PreviousAnswers.tsx +++ b/source/sites/mon-entreprise.fr/pages/Créer/GuideStatut/PreviousAnswers.tsx @@ -20,9 +20,9 @@ const requirementToText = ( ) case 'soleProprietorship': return value ? ( - Entreprise individuelle + Entreprise individuelle ) : ( - Société + Société ) case 'directorStatus': return value === 'SELF_EMPLOYED' ? ( diff --git a/source/sites/mon-entreprise.fr/pages/Créer/GuideStatut/SoleProprietorship.tsx b/source/sites/mon-entreprise.fr/pages/Créer/GuideStatut/SoleProprietorship.tsx index 332f38361..e12452586 100644 --- a/source/sites/mon-entreprise.fr/pages/Créer/GuideStatut/SoleProprietorship.tsx +++ b/source/sites/mon-entreprise.fr/pages/Créer/GuideStatut/SoleProprietorship.tsx @@ -30,12 +30,12 @@ const SoleProprietorship = ({ isSoleProprietorship }) => { />

    - + Entreprise individuelle ou société ?

    - + Ce choix determine votre degré de responsabilité et votre capacité à accueillir de nouveaux associés dans le futur{' '} @@ -43,7 +43,7 @@ const SoleProprietorship = ({ isSoleProprietorship }) => {

    • - + Entreprise individuelle : 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 }) => {
    • - + Société : 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" > - Entreprise individuelle + + Entreprise individuelle +
    {/* this is an economic activity conducted by a single natural person, in his own name ; */} diff --git a/source/sites/mon-entreprise.fr/pages/Créer/GuideStatut/index.tsx b/source/sites/mon-entreprise.fr/pages/Créer/GuideStatut/index.tsx index 4662229f9..d0812a4d7 100644 --- a/source/sites/mon-entreprise.fr/pages/Créer/GuideStatut/index.tsx +++ b/source/sites/mon-entreprise.fr/pages/Créer/GuideStatut/index.tsx @@ -46,7 +46,7 @@ export default function Créer() {

    - Choix du statut juridique + Choix du statut juridique

    diff --git a/source/sites/mon-entreprise.fr/pages/Créer/Home.tsx b/source/sites/mon-entreprise.fr/pages/Créer/Home.tsx index e983c146c..5bccca196 100644 --- a/source/sites/mon-entreprise.fr/pages/Créer/Home.tsx +++ b/source/sites/mon-entreprise.fr/pages/Créer/Home.tsx @@ -26,12 +26,12 @@ export default function Créer() {

    - Créer une entreprise + Créer une entreprise

    - + 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')}

    - + Le cas des professions libérales réglementées n'est pas encore traité @@ -80,8 +80,8 @@ export default function Créer() { className="ui__ interactive card button-choice lighter-bg" to={sitePaths.créer.guideStatut.liste} > - -

    Liste des statuts juridiques

    + +

    Liste des statuts juridiques

    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 } }} > - +

    Comparateur de régimes

    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']} > - +

    Démarche auto-entrepreneur

    Vous souhaitez devenir auto-entrepreneur ? Découvrez les étapes diff --git a/source/sites/mon-entreprise.fr/pages/Créer/StatutDescription.tsx b/source/sites/mon-entreprise.fr/pages/Créer/StatutDescription.tsx index f8c2bf2d6..b23293e17 100644 --- a/source/sites/mon-entreprise.fr/pages/Créer/StatutDescription.tsx +++ b/source/sites/mon-entreprise.fr/pages/Créer/StatutDescription.tsx @@ -7,12 +7,12 @@ type Props = { const StatutDescription = ({ statut }: Props) => statut === 'EI' ? ( - + Aucun apport en capital n'est nécessaire. Le capital privé et le capital de l'entreprise ne font qu'un. ) : statut === '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). ) : statut === '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é. ) : statut.includes('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. ) : statut === '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). ) : statut === '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). ) : statut === '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 €. ) : (statut as string) === '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). ) : statut === 'auto-entrepreneur' ? ( - + 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. ) : statut === 'auto-entrepreneur-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 diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/Embaucher.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/Embaucher.tsx index 6bd9db571..20de524d1 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/Embaucher.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/Embaucher.tsx @@ -35,10 +35,12 @@ function Embaucher({ onChecklistInitialization, onItemCheck }: EmbaucherProps) { />

    - Les formalités pour embaucher + + Les formalités pour embaucher +

    - + Toutes les étapes nécessaires à l'embauche de votre premier employé.

    @@ -50,7 +52,7 @@ function Embaucher({ onChecklistInitialization, onItemCheck }: EmbaucherProps) { + Signer un contrat de travail avec votre employé } @@ -70,13 +72,13 @@ function Embaucher({ onChecklistInitialization, onItemCheck }: EmbaucherProps) { + Déclarer l'embauche à l'administration sociale } explanations={

    - + Les fiches de paie et les déclarations peuvent être traitées en ligne gratuitement par le{' '} @@ -116,7 +118,7 @@ function Embaucher({ onChecklistInitialization, onItemCheck }: EmbaucherProps) { + Tenir un registre des employés à jour } @@ -135,7 +137,7 @@ function Embaucher({ onChecklistInitialization, onItemCheck }: EmbaucherProps) { + Prendre contact avec l'institution de prévoyance complémentaire obligatoire qui vous est assignée @@ -147,7 +149,7 @@ function Embaucher({ onChecklistInitialization, onItemCheck }: EmbaucherProps) { className="ui__ button" target="_blank" > - + Trouver mon institution de prévoyance @@ -158,13 +160,13 @@ function Embaucher({ onChecklistInitialization, onItemCheck }: EmbaucherProps) { + Choisir une complémentaire santé } explanations={

    - + 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) { + S'inscrire à un bureau de médecine du travail } explanations={

    - + N'oubliez pas de planifier un rendez-vous initial pour chaque nouvelle embauche.{' '} @@ -193,7 +195,7 @@ function Embaucher({ onChecklistInitialization, onItemCheck }: EmbaucherProps) { } /> - +

    Tous les mois

    • diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/Home.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/Home.tsx index 824597d38..ac8e4cbb9 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/Home.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/Home.tsx @@ -59,13 +59,13 @@ export default function SocialSecurity() {

      - Gérer mon activité + Gérer mon activité

      {!company && (

      - + Vous souhaitez vous verser un revenu ou embaucher ?
      Vous aurez à payer des cotisations et des impôts.
      Anticipez leurs montants grâce aux simulateurs adaptés à votre @@ -85,7 +85,9 @@ export default function SocialSecurity() { <>

      - Que souhaitez-vous faire ? + + Que souhaitez-vous faire ? +

      {!!régime && ( - +

      Calculer mon revenu net

      Estimez précisément le montant de vos cotisations grâce au @@ -118,7 +120,7 @@ export default function SocialSecurity() { } }} > - +

      Estimer le montant d’une embauche

      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} > - +

      Découvrir les démarches d’embauche

      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" > - +

      Accéder au site officiel auto-entrepreneur

      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} > - +

      Comprendre la sécurité sociale

      A quoi servent les cotisations sociales ? Le point sur le @@ -241,7 +243,7 @@ const CompanySection = ({ company }: CompanySectionProps) => {

      - + Êtes-vous auto-entrepreneur ?{' '}

      @@ -266,7 +268,7 @@ const CompanySection = ({ company }: CompanySectionProps) => { <> - +

      Êtes-vous dirigeant majoritaire ?

      Si vous êtes administrateur majoritaire ou si vous faites partie @@ -314,11 +316,11 @@ const CompanySection = ({ company }: CompanySectionProps) => { {company.isDirigeantMajoritaire != null && ( {company.isDirigeantMajoritaire ? ( - + Dirigeant majoritaire ) : ( - + Dirigeant minoritaire )} @@ -334,7 +336,7 @@ const CompanySection = ({ company }: CompanySectionProps) => { showSearchModal(true) }} > - + Changer l'entreprise sélectionnée @@ -345,7 +347,7 @@ const CompanySection = ({ company }: CompanySectionProps) => { onClick={() => showSearchModal(true)} className="ui__ plain cta button" > - Renseigner mon entreprise + Renseigner mon entreprise

      )} diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/SchemeSelection.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/SchemeSelection.tsx index 31dd922d0..d84fc7c3f 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/SchemeSelection.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/SchemeSelection.tsx @@ -15,7 +15,7 @@ export default function SchemeChoice() { {t('selectionRégime.page.titre', 'Selection du régime')}

      - + Quel régime souhaitez-vous explorer ?

      @@ -29,7 +29,7 @@ export default function SchemeChoice() { Assimilé salarié ( - + SAS, SASU ou SARL avec gérant minoritaire ) @@ -45,7 +45,7 @@ export default function SchemeChoice() { Indépendant ( - + EI, EIRL, EURL ou SARL avec gérant majoritaire ) @@ -61,7 +61,7 @@ export default function SchemeChoice() {

      - + Vous ne savez pas lequel choisir ?

      @@ -70,7 +70,9 @@ export default function SchemeChoice() { className="ui__ plain cta button" to={sitePaths.simulateurs.comparaison} > - Comparer les régimes + + Comparer les régimes +

      diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/SécuritéSociale.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/SécuritéSociale.tsx index d35183526..7bba9efc8 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/SécuritéSociale.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/SécuritéSociale.tsx @@ -13,7 +13,7 @@ export default function SocialSecurity() { - +

      Protection sociale

      En France, tous les travailleurs bénéficient d'une protection diff --git a/source/sites/mon-entreprise.fr/pages/Landing/Landing.tsx b/source/sites/mon-entreprise.fr/pages/Landing/Landing.tsx index 1b4e9cb79..a54537dcc 100644 --- a/source/sites/mon-entreprise.fr/pages/Landing/Landing.tsx +++ b/source/sites/mon-entreprise.fr/pages/Landing/Landing.tsx @@ -25,12 +25,12 @@ export default function Landing() { />

      - + L'assistant officiel du créateur d'entreprise

      - + Les ressources nécessaires pour développer votre activité, du statut juridique à l'embauche. @@ -46,7 +46,7 @@ export default function Landing() { } >

      {emoji('💡')}
      - +

      Créer une entreprise

      Un accompagnement au choix du statut juridique et la liste @@ -59,7 +59,7 @@ export default function Landing() {

      {emoji('💶')}
      - +

      Gérer mon activité

      Des simulateurs pour anticiper le montant des cotisations sociales @@ -75,7 +75,7 @@ export default function Landing() { to={sitePaths.économieCollaborative.index} >

      {emoji('🙋')}
      - +

      Que dois-je déclarer ?

      Un guide pour savoir comment déclarer vos revenus issus de @@ -92,14 +92,14 @@ export default function Landing() { className="ui__ small button " > {emoji('🧮')}{' '} - + Voir la liste des simulateurs

    - + Ceci peut être fait par le biais du formulaire appelé DPAE, doit être complété dans les 8 jours avant toute embauche, et peut{' '} @@ -90,13 +92,13 @@ function Embaucher({ onChecklistInitialization, onItemCheck }: EmbaucherProps) { + Choisir un logiciel de paie } explanations={

    - +

    Qui sommes-nous ?

    Nous avons développé ce site pour{' '} diff --git a/source/sites/mon-entreprise.fr/pages/Simulateurs/AssimiléSalarié.tsx b/source/sites/mon-entreprise.fr/pages/Simulateurs/AssimiléSalarié.tsx index eeaf9ad20..5651e97ac 100644 --- a/source/sites/mon-entreprise.fr/pages/Simulateurs/AssimiléSalarié.tsx +++ b/source/sites/mon-entreprise.fr/pages/Simulateurs/AssimiléSalarié.tsx @@ -34,7 +34,7 @@ export default function AssimiléSalarié() { />

    - + Simulateur de revenus assimilé salarié

    diff --git a/source/sites/mon-entreprise.fr/pages/Simulateurs/AutoEntrepreneur.tsx b/source/sites/mon-entreprise.fr/pages/Simulateurs/AutoEntrepreneur.tsx index 5adc5d222..81c600e83 100644 --- a/source/sites/mon-entreprise.fr/pages/Simulateurs/AutoEntrepreneur.tsx +++ b/source/sites/mon-entreprise.fr/pages/Simulateurs/AutoEntrepreneur.tsx @@ -39,7 +39,7 @@ export default function AutoEntrepreneur() { />

    - + Simulateur de revenus auto-entrepreneur

    diff --git a/source/sites/mon-entreprise.fr/pages/Simulateurs/Home.tsx b/source/sites/mon-entreprise.fr/pages/Simulateurs/Home.tsx index ff86c738f..851b6067d 100644 --- a/source/sites/mon-entreprise.fr/pages/Simulateurs/Home.tsx +++ b/source/sites/mon-entreprise.fr/pages/Simulateurs/Home.tsx @@ -35,7 +35,7 @@ export default function Simulateurs() { }} >
    {emoji('☂️')}
    - +

    Assimilé salarié

    Calculer le revenu d'un dirigeant de SAS, SASU ou SARL @@ -51,7 +51,7 @@ export default function Simulateurs() { }} >

    {emoji('🃏')}
    - +

    Indépendant

    Calculer le revenu d'un dirigeant de EURL, EI, ou SARL @@ -67,7 +67,7 @@ export default function Simulateurs() { }} >

    {emoji('🧢')}
    - +

    Auto-entrepreneur

    Calculer le revenu (ou le chiffre d'affaires) d'un @@ -83,7 +83,7 @@ export default function Simulateurs() { }} >

    {emoji('🤝')}
    - +

    Salarié

    Calculer le salaire net, brut, ou total d'un salarié, stagiaire, @@ -100,7 +100,7 @@ export default function Simulateurs() { }} >

    {emoji('👩‍🎨')}
    - +

    Artiste-auteur

    Estimer les cotisations sociales d'un artiste ou auteur @@ -116,7 +116,7 @@ export default function Simulateurs() { }} >

    {emoji('📊')}
    - +

    Comparaison statuts

    Simulez les différences entre les régimes (cotisations, @@ -127,7 +127,7 @@ export default function Simulateurs() {

    - +

    Tous les simulateurs sur ce site sont :

    • diff --git a/source/sites/mon-entreprise.fr/pages/Simulateurs/Indépendant.tsx b/source/sites/mon-entreprise.fr/pages/Simulateurs/Indépendant.tsx index 08ad38494..3ed7827ea 100644 --- a/source/sites/mon-entreprise.fr/pages/Simulateurs/Indépendant.tsx +++ b/source/sites/mon-entreprise.fr/pages/Simulateurs/Indépendant.tsx @@ -35,7 +35,7 @@ export default function Indépendant() { />

      - + Simulateur de revenus pour indépendants

      diff --git a/source/sites/mon-entreprise.fr/pages/Simulateurs/Salarié.tsx b/source/sites/mon-entreprise.fr/pages/Simulateurs/Salarié.tsx index ab4d07e40..94df2a39b 100644 --- a/source/sites/mon-entreprise.fr/pages/Simulateurs/Salarié.tsx +++ b/source/sites/mon-entreprise.fr/pages/Simulateurs/Salarié.tsx @@ -36,7 +36,7 @@ export default function Salarié() { />

      - + Simulateur de revenus pour salarié

      @@ -104,7 +104,7 @@ export let SalarySimulation = () => { explanations={} customEndMessages={ <> - + Vous pouvez maintenant concrétiser votre projet d'embauche.
      @@ -112,7 +112,9 @@ export let SalarySimulation = () => { className="ui__ plain button" to={sitePaths.gérer.embaucher} > - Connaître les démarches + + Connaître les démarches +
      diff --git a/source/sites/mon-entreprise.fr/pages/Simulateurs/SchemeComparaison.tsx b/source/sites/mon-entreprise.fr/pages/Simulateurs/SchemeComparaison.tsx index 68f8f47e3..efcc9b8eb 100644 --- a/source/sites/mon-entreprise.fr/pages/Simulateurs/SchemeComparaison.tsx +++ b/source/sites/mon-entreprise.fr/pages/Simulateurs/SchemeComparaison.tsx @@ -23,14 +23,14 @@ export default function SchemeComparaisonPage() { />

      - + Indépendant, assimilé salarié ou{' '} auto-entrepreneur : quel régime choisir ?

      - + 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 diff --git a/source/sites/mon-entreprise.fr/pages/ÉconomieCollaborative/Activité.tsx b/source/sites/mon-entreprise.fr/pages/ÉconomieCollaborative/Activité.tsx index 8144138d7..a959ceea4 100644 --- a/source/sites/mon-entreprise.fr/pages/ÉconomieCollaborative/Activité.tsx +++ b/source/sites/mon-entreprise.fr/pages/ÉconomieCollaborative/Activité.tsx @@ -35,7 +35,7 @@ export default function Activité({

      {activité.titre}

      {activité.explication}

      - + Quelles sont plus précisément les activités exercées ?

      @@ -71,7 +71,7 @@ export default function Activité({ /> {estExonérée ? null : activité['seuil pro'] === 0 ? ( - +

      Il s'agit d'une activité professionnelle

      Les revenus de cette activité sont considérés comme des{' '} @@ -79,13 +79,13 @@ export default function Activité({

      ) : activité['seuil déclaration'] === 0 && !activité['seuil pro'] ? ( - +

      Vous devez déclarez vos revenus aux impôts

      Les revenus de cette activité sont imposables.

      ) : ( <> - +

      Revenus annuels

      Vos revenus annuels pour cette activité sont :

      diff --git a/source/sites/mon-entreprise.fr/pages/ÉconomieCollaborative/ActivitésSelection.tsx b/source/sites/mon-entreprise.fr/pages/ÉconomieCollaborative/ActivitésSelection.tsx index 876c2c914..2f39ad316 100644 --- a/source/sites/mon-entreprise.fr/pages/ÉconomieCollaborative/ActivitésSelection.tsx +++ b/source/sites/mon-entreprise.fr/pages/ÉconomieCollaborative/ActivitésSelection.tsx @@ -35,7 +35,7 @@ export default function ActivitésSelection() {

      {titre}

      - +

      Vous avez des revenus issus des{' '} plateformes en ligne (Airbnb, Abritel, Drivy, @@ -56,13 +56,13 @@ export default function ActivitésSelection() {

      - + Quels types d'activités avez-vous exercé ?

      titre)} />

      - + PS : cet outil est là uniquement pour vous informer, aucune donnée ne sera transmise aux administrations {' '} diff --git a/source/sites/mon-entreprise.fr/pages/ÉconomieCollaborative/ExceptionsExonération.tsx b/source/sites/mon-entreprise.fr/pages/ÉconomieCollaborative/ExceptionsExonération.tsx index 291ffd939..780bb932c 100644 --- a/source/sites/mon-entreprise.fr/pages/ÉconomieCollaborative/ExceptionsExonération.tsx +++ b/source/sites/mon-entreprise.fr/pages/ÉconomieCollaborative/ExceptionsExonération.tsx @@ -17,7 +17,7 @@ export default function ExceptionsExonération({ return ( <>

      - + Êtes-vous dans un des cas suivants ?

      @@ -37,7 +37,7 @@ export default function ExceptionsExonération({ ))}

      - + Si aucun de ces cas ne s'appliquent à vous, vous n'aurez rien à déclarer. diff --git a/source/sites/mon-entreprise.fr/pages/ÉconomieCollaborative/NextButton.tsx b/source/sites/mon-entreprise.fr/pages/ÉconomieCollaborative/NextButton.tsx index e5d9551c2..1171cf1da 100644 --- a/source/sites/mon-entreprise.fr/pages/ÉconomieCollaborative/NextButton.tsx +++ b/source/sites/mon-entreprise.fr/pages/ÉconomieCollaborative/NextButton.tsx @@ -33,7 +33,7 @@ export default function NextButton({ activité, disabled }) { {nextActivité || disabled ? ( Continuer ) : ( - + Voir mes obligations )} diff --git a/source/sites/mon-entreprise.fr/pages/ÉconomieCollaborative/VotreSituation.tsx b/source/sites/mon-entreprise.fr/pages/ÉconomieCollaborative/VotreSituation.tsx index 89ff7e395..b3a0beb41 100644 --- a/source/sites/mon-entreprise.fr/pages/ÉconomieCollaborative/VotreSituation.tsx +++ b/source/sites/mon-entreprise.fr/pages/ÉconomieCollaborative/VotreSituation.tsx @@ -54,7 +54,7 @@ export default function VotreSituation() {

      {déclarations.RÉGIME_GÉNÉRAL_DISPONIBLE.length > 0 && ( <> - +

      Déclarer en tant qu'activité professionnelle

      Vos revenus sont considérés comme revenus professionnels, ils @@ -64,7 +64,7 @@ export default function VotreSituation() {

      - +

      Avec une entreprise

      Si vous possédez déjà une activité déclarée, vous pouvez ajouter @@ -83,7 +83,7 @@ export default function VotreSituation() { {régimeGénéralDisponible && ( - +

      Avec l'option régime général

      Pour certaines activités, vous pouvez déclarer vos revenus @@ -105,7 +105,7 @@ export default function VotreSituation() { )} {déclarations.IMPOSITION.length > 0 && ( <> - +

      Déclarer vos revenus aux impôts

      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 && ( <> - +

      Rien à faire

      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) ? ( - + Régime général disponible ) : null diff --git a/source/sites/mon-entreprise.fr/pages/ÉconomieCollaborative/index.tsx b/source/sites/mon-entreprise.fr/pages/ÉconomieCollaborative/index.tsx index 2d163a5f0..6b9570bed 100644 --- a/source/sites/mon-entreprise.fr/pages/ÉconomieCollaborative/index.tsx +++ b/source/sites/mon-entreprise.fr/pages/ÉconomieCollaborative/index.tsx @@ -21,7 +21,7 @@ export default function ÉconomieCollaborative() { className="ui__ simple small push-left button " > ←{' '} - + Retour à la selection d'activités diff --git a/yarn.lock b/yarn.lock index 36ea8fc9e..28b64c2db 100644 --- a/yarn.lock +++ b/yarn.lock @@ -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"