From 139ca46ad1a76acd96ce4c002474dfe550eb8eb4 Mon Sep 17 00:00:00 2001 From: Maxime Quandalle Date: Sat, 12 Oct 2019 20:23:54 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9A=99=EF=B8=8F=20Traduction=20des=20unit?= =?UTF-8?q?=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Gestion du pluriel (1 jour, 2 jours) et de la traduction (3 days). Fixes #729 --- source/components/Value.js | 7 ++--- source/engine/format.js | 2 +- source/engine/generateQuestions.js | 2 +- source/engine/units.js | 22 ++++++++++---- source/i18n.js | 5 +++- source/locales/units.yaml | 20 +++++++++++++ source/règles/base.yaml | 48 +++++++++++++++--------------- 7 files changed, 68 insertions(+), 38 deletions(-) create mode 100644 source/locales/units.yaml diff --git a/source/components/Value.js b/source/components/Value.js index 6655faaa6..a0770c2c8 100644 --- a/source/components/Value.js +++ b/source/components/Value.js @@ -1,5 +1,4 @@ import { React, T } from 'Components' -import { serialiseUnit } from 'Engine/units' import { useTranslation } from 'react-i18next' import { formatValue } from 'Engine/format' @@ -42,8 +41,6 @@ export default function Value({ ) let valueType = typeof nodeValue, - unitText = - unit !== null && (typeof unit == 'object' ? serialiseUnit(unit) : unit), formattedValue = valueType === 'string' ? ( {nodeValue} @@ -56,8 +53,8 @@ export default function Value({ minimumFractionDigits, maximumFractionDigits, language, - value: nodeValue, - unit: unitText + unit, + value: nodeValue }) ) diff --git a/source/engine/format.js b/source/engine/format.js index 76d836622..79e23bb21 100644 --- a/source/engine/format.js +++ b/source/engine/format.js @@ -58,7 +58,7 @@ export function formatValue({ if (typeof value !== 'number') { return value } - const serializedUnit = typeof unit == 'object' ? serialiseUnit(unit) : unit + const serializedUnit = serialiseUnit(unit, value) switch (serializedUnit) { case '€': diff --git a/source/engine/generateQuestions.js b/source/engine/generateQuestions.js index 261851dec..9079c8739 100644 --- a/source/engine/generateQuestions.js +++ b/source/engine/generateQuestions.js @@ -25,7 +25,7 @@ import { } from 'ramda' import React from 'react' import { findRuleByDottedName, queryRule } from './rules' -import {serialiseUnit} from 'Engine/units' +import { serialiseUnit } from 'Engine/units' /* COLLECTE DES VARIABLES MANQUANTES diff --git a/source/engine/units.js b/source/engine/units.js index 96829f7b5..987a1fd0e 100644 --- a/source/engine/units.js +++ b/source/engine/units.js @@ -1,4 +1,5 @@ import { remove, isEmpty, unnest } from 'ramda' +import i18n from '../i18n' //TODO this function does not handle complex units like passenger-kilometer/flight export let parseUnit = string => { @@ -10,12 +11,21 @@ export let parseUnit = string => { return result } -let printUnits = units => units.filter(unit => unit !== '%').join('-') +let printUnits = (units, count) => + units + .filter(unit => unit !== '%') + .map(unit => i18n.t(`units:${unit}`, { count })) + .join('-') -export let serialiseUnit = rawUnit => { +const plural = 2 +export let serialiseUnit = (rawUnit, count = plural) => { + if (typeof rawUnit !== 'object') { + return typeof rawUnit === 'string' + ? i18n.t(`units:${rawUnit}`, { count }) + : rawUnit + } let unit = simplify(rawUnit), { numerators = [], denominators = [] } = unit - // the unit '%' is only displayed when it is the only unit let merge = [...numerators, ...denominators] if (merge.length === 1 && merge[0] === '%') return '%' @@ -26,10 +36,10 @@ export let serialiseUnit = rawUnit => { !n && !d ? '' : n && !d - ? printUnits(numerators) + ? printUnits(numerators, count) : !n && d - ? `/${printUnits(denominators)}` - : `${printUnits(numerators)} / ${printUnits(denominators)}` + ? `/${printUnits(denominators, 1)}` + : `${printUnits(numerators, plural)} / ${printUnits(denominators, 1)}` return string } diff --git a/source/i18n.js b/source/i18n.js index da2559857..4b84ebc43 100644 --- a/source/i18n.js +++ b/source/i18n.js @@ -1,6 +1,7 @@ import i18next from 'i18next' import { initReactI18next } from 'react-i18next' import enTranslations from './locales/en.yaml' +import unitsTranslations from './locales/units.yaml' let lang = new URLSearchParams(document.location.search.substring(1)).get('lang') || @@ -13,8 +14,10 @@ i18next .init({ lng: lang, resources: { + fr: { units: unitsTranslations.fr }, en: { - translation: enTranslations + translation: enTranslations, + units: unitsTranslations.en } } }) diff --git a/source/locales/units.yaml b/source/locales/units.yaml new file mode 100644 index 000000000..7912b8e4c --- /dev/null +++ b/source/locales/units.yaml @@ -0,0 +1,20 @@ +fr: + heure_plural: heures + jour_plural: jours + semaine_plural: semaines + trimestre_plural: trimestres + employé_plural: employés + points_plural: points +en: + heure: hour + heure_plural: hours + jour: day + jour_plural: days + semaine: week + semaine_plural: weeks + trimestre: quarter + trimestre_plural: quarters + repas: meal + repas_plural: meals + employé: employee + employé_plural: employees diff --git a/source/règles/base.yaml b/source/règles/base.yaml index f7baeee8d..1aebb6775 100644 --- a/source/règles/base.yaml +++ b/source/règles/base.yaml @@ -6,7 +6,7 @@ période: période . jours ouvrés moyen par mois: période: mois - unité: jours + unité: jour formule: 21 note: On retient 21 comme nombre de jours ouvrés moyen par mois @@ -192,7 +192,7 @@ contrat salarié . CDD . congés dus en jours ouvrés: formule: contrat salarié . congés dus par mois * durée contrat contrat salarié . congés dus par mois: - unité: jours/mois + unité: jour/mois formule: 25 / 12 contrat salarié . CDD . compensation pour congés non pris . prime maintient de salaire: @@ -513,7 +513,7 @@ contrat salarié . CDD . congés non pris: description: | Le contrat étant à durée déterminée, le salarié n'a pas forcément le temps de prendre tous les jours de congés qu'il a acquis comme tout salarié au cours du contrat. Par exemple, pour un contrat de 3 mois, le salarié acquiert 2,08 jours de congés par mois (25 jours / 12 mois = 2,08), donc 6,25 sur la durée du contrat. Or il se peut que l'entreprise le contraigne à n'en prendre que 4, donc 2,25 jours ne seront pas pris. Ils seront payés par l'employeur à la fin du contrat. - unité: jours + unité: jour suggestions: 3: 3 10: 10 @@ -1052,7 +1052,7 @@ contrat salarié . SMIC temps plein . net imposable: SMIC horaire: formule: 10.03 - unité: €/heures + unité: €/heure références: décret: https://www.legifrance.gouv.fr/affichTexte.do?cidTexte=JORFTEXT000037833206 service-public.fr: https://www.service-public.fr/particuliers/vosdroits/F2300 @@ -1689,7 +1689,7 @@ entreprise . effectif: question: Quel est l'effectif de l'entreprise ? description: | De nombreuses cotisations patronales varient selon l'effectif de l'entreprise. - unité: employés + unité: employé suggestions: 1: 1 20: 20 @@ -1778,7 +1778,7 @@ entreprise . établissement bancaire: - établissement . localisation . département = 'Mayotte' contrat salarié . temps de travail: - unité: heures + unité: heure formule: somme: - temps contractuel @@ -1787,7 +1787,7 @@ contrat salarié . temps de travail: description: En France, la base légale du travail est de 35h/semaine. Mais un grand nombre de dispositions existantes permettent de faire varier ce nombre. Vous pouvez les retrouver sur la page [service-public.fr](https://www.service-public.fr/particuliers/vosdroits/N458) dédiée. contrat salarié . temps de travail . temps contractuel: - unité: heures + unité: heure période: mois formule: multiplication: @@ -1795,7 +1795,7 @@ contrat salarié . temps de travail . temps contractuel: facteur: période . semaines par mois contrat salarié . temps de travail . temps contractuel . temps hebdomadaire: - unité: heures/semaine + unité: heure/semaine formule: variations: - si: temps partiel @@ -1804,7 +1804,7 @@ contrat salarié . temps de travail . temps contractuel . temps hebdomadaire: contrat salarié . temps de travail . base légale: formule: 35 - unité: heures/semaine + unité: heure/semaine contrat salarié . temps de travail . temps partiel: période: aucune @@ -1817,7 +1817,7 @@ contrat salarié . temps de travail . temps partiel: contrat salarié . temps de travail . temps partiel . heures par semaine: par défaut: 32 - unité: heures / semaine + unité: heure/semaine question: Quel est le nombre d'heures travaillées par semaine dans le cadre du temps partiel ? contrôles: - si: heures par semaine < 24 @@ -1841,7 +1841,7 @@ contrat salarié . temps de travail . heures supplémentaires: titre: Nombre d'heures supplémentaires question: Combien d'heures supplémentaires (non récupérées en repos) sont effectuées par mois ? par défaut: 0 - unité: heures + unité: heure période: mois suggestions: aucune: 0 @@ -1877,7 +1877,7 @@ contrat salarié . temps de travail . heures supplémentaires . majoration: titre: majoration heures supplémentaires note: Pour l'instant, nous implémentons uniquement les taux standards et ceux de la convention HCR (Hôtel café restaurant). Si vous dépendez d'une convention avec des taux spécifiques, merci de nous le signaler à `contact@mon-entreprise.beta.gouv.fr` période: mois - unité: heures + unité: heure formule: variations: - si: entreprise . hôtel café restaurant @@ -4080,7 +4080,7 @@ auto-entrepreneur . impôt: auto-entrepreneur . impôt . abattement: période: flexible - unité: '€' + unité: € formule: le maximum de: - multiplication: @@ -4235,7 +4235,7 @@ protection sociale . retraite . base . taux de la pension: protection sociale . retraite . trimestres validés par an: période: aucune - unité: trimestres + unité: trimestre formule: le minimum de: - somme: @@ -4246,13 +4246,13 @@ protection sociale . retraite . trimestres validés par an: protection sociale . retraite . trimestres validés par an . trimestres salarié: période: aucune - unité: trimestres + unité: trimestre applicable si: contrat salarié formule: barème trimestres générique protection sociale . retraite . trimestres validés par an . trimestres indépendant: période: aucune - unité: trimestres + unité: trimestre applicable si: indépendant formule: variations: @@ -4267,7 +4267,7 @@ protection sociale . retraite . trimestres validés par an . barème trimestres période: aucune formule: barème linéaire: - unité: trimestres + unité: trimestre assiette: revenu moyen [annuel] multiplicateur: SMIC horaire tranches: @@ -4296,7 +4296,7 @@ protection sociale . retraite . trimestres validés par an . trimestres auto-ent - si: entreprise . catégorie d'activité = 'libérale' alors: barème linéaire: - unité: trimestres + unité: trimestre assiette: entreprise . chiffre d'affaires [annuel] tranches: - en-dessous de: 2880 @@ -4318,7 +4318,7 @@ protection sociale . retraite . trimestres validés par an . trimestres auto-ent - entreprise . catégorie d'activité . restauration ou hébergement alors: barème linéaire: - unité: trimestres + unité: trimestre assiette: entreprise . chiffre d'affaires [annuel] tranches: - en-dessous de: 4137 @@ -4336,7 +4336,7 @@ protection sociale . retraite . trimestres validés par an . trimestres auto-ent montant: 4 - sinon: barème linéaire: - unité: trimestres + unité: trimestre assiette: entreprise . chiffre d'affaires [annuel] tranches: - en-dessous de: 2412 @@ -4380,7 +4380,7 @@ protection sociale . retraite . complémentaire salarié: protection sociale . retraite . complémentaire salarié . valeur du point: formule: 1.2588 période: année - unité: €/points + unité: €/point références: service-public.fr: https://www.service-public.fr/particuliers/vosdroits/F15396 agirc-arrco: https://www.agirc-arrco.fr/ressources-documentaires/chiffres-cles/ @@ -4388,13 +4388,13 @@ protection sociale . retraite . complémentaire salarié . valeur du point: protection sociale . retraite . complémentaire salarié . points acquis: formule: points acquis par mois * mois cotisés période: aucune - unité: points + unité: point références: service-public.fr: https://www.service-public.fr/particuliers/vosdroits/F15396 protection sociale . retraite . complémentaire salarié . points acquis par mois: période: mois - unité: points/mois + unité: point/mois formule: contrat salarié . retraite complémentaire / prix d'achat du point protection sociale . retraite . complémentaire salarié . prix d'achat du point: @@ -4413,7 +4413,7 @@ protection sociale . retraite . complémentaire sécurité des indépendants: protection sociale . retraite . complémentaire sécurité des indépendants . valeur du point: formule: 1.187 période: année - unité: €/points + unité: €/point références: secu-independants.fr: https://www.secu-independants.fr/baremes/prestations-vieillesse-et-invalidite-deces