diff --git a/packages/i18n/package.json b/packages/i18n/package.json
index b484985948..aedd49dd3a 100644
--- a/packages/i18n/package.json
+++ b/packages/i18n/package.json
@@ -14,7 +14,9 @@
"engines": {
"node": ">=18.17.0"
},
- "scripts": {},
+ "scripts": {
+ "i18n:sync": "pnpm tsx scripts/i18n-sync.ts"
+ },
"dependencies": {
"dompurify": "^3.1.5",
"lodash": "^4.17.21",
diff --git a/packages/i18n/scripts/i18n-sync.ts b/packages/i18n/scripts/i18n-sync.ts
new file mode 100644
index 0000000000..926a37c8ff
--- /dev/null
+++ b/packages/i18n/scripts/i18n-sync.ts
@@ -0,0 +1,28 @@
+import { readdirSync, readFileSync, statSync, writeFileSync } from 'node:fs';
+import { extname, resolve } from 'node:path';
+
+import { mergeTranslations } from '../src/util';
+
+const components = ['admin', 'api', 'shared', 'survey'];
+
+for (const component of components) {
+ const langs = readdirSync(resolve('src', component));
+
+ for (const lang of langs) {
+ const langPathStats = statSync(resolve('src', component, lang));
+ if (lang === 'en' || langPathStats.isFile())
+ continue;
+
+ const sections = readdirSync(resolve('src', component, lang));
+ for (const section of sections) {
+ const ext = extname(section);
+ if (ext !== '.json')
+ continue;
+
+ const defaults = JSON.parse(readFileSync(resolve('src', component, 'en', section), 'utf8'));
+ const sync = JSON.parse(readFileSync(resolve('src', component, lang, section), 'utf8'));
+ const merged = mergeTranslations(defaults, sync);
+ writeFileSync(resolve('src', component, lang, section), JSON.stringify(merged, null, 2), 'utf8');
+ }
+ }
+}
diff --git a/packages/i18n/src/admin/fr/as-served-sets.json b/packages/i18n/src/admin/fr/as-served-sets.json
index 9d91a0ab19..57b768f0e8 100644
--- a/packages/i18n/src/admin/fr/as-served-sets.json
+++ b/packages/i18n/src/admin/fr/as-served-sets.json
@@ -5,7 +5,6 @@
"create": "Ajouter une série de photos de portions",
"edit": "Modifier la série de photos de portions",
"delete": "Supprimer la série de photos de portions",
-
"id": "Identifiant de la série de photos de portions",
"selectionImage": "Photo sélectionnée",
"images": {
diff --git a/packages/i18n/src/admin/fr/common.json b/packages/i18n/src/admin/fr/common.json
index 44c7466e01..48dd063cd7 100644
--- a/packages/i18n/src/admin/fr/common.json
+++ b/packages/i18n/src/admin/fr/common.json
@@ -62,7 +62,6 @@
"privacy": "Politique de confidentialité",
"tos": "Conditions d'utilisation"
},
-
"admin": "Administrateur",
"fdb": "Base de données alimentaires",
"local": "Version régionale",
@@ -70,14 +69,12 @@
"surveyMgmt": "Gestion des enquêtes",
"acl": "Contrôle d'accès",
"system": "Système",
-
"yes": "Oui",
"true": "Oui",
"no": "Non",
"false": "Non",
"none": "Aucun",
"na": "Non concerné",
-
"name": "Nom",
"displayName": "Libellé",
"description": "Description",
@@ -93,31 +90,28 @@
"value": "Valeur",
"exclusive": "Exclusive"
},
-
"date": "Date",
"expiredAt": "Expiré à",
+ "expiresAt": "Expires at",
"startedAt": "Commencé à",
"completedAt": "Complété à",
"createdAt": "Créé à",
"updatedAt": "Mis à jour à",
"deletedAt": "Supprimé à",
-
"app": {
"_": "Application",
"info": "Informations de l'application",
"build": "Construire"
},
-
"clipboard": {
"_": "Copier dans le presse-papiers",
+ "na": "Clipboard API not available",
"copied": "Données copiées dans le presse-papiers"
},
-
"sw": {
"check": "Une mise à jour du contenu est disponible",
"update": "Mise à jour"
},
-
"action": {
"_": "Action",
"active": "Activer",
@@ -155,23 +149,23 @@
"msg": "Vous allez quitter une page avec des modifications qui n'ont pas été enregistrées. Voulez-vous continuer ?",
"delete": "Vous êtes sur le point de supprimer {name}.",
"remove": "Vous êtes sur le point d'enlever {name}.",
+ "revoke": "You're about to revoke {name}.",
"multi": {
"delete": "Voulez-vous supprimer les éléments sélectionnés : {count}"
},
"typed": "Veuillez saisir {name} pour confirmer."
}
},
-
"msg": {
"created": "L'enregistrement ({name}) a été créé.",
"updated": "L'enregistrement ({name}) a été mis à jour.",
"deleted": "L'enregistrement ({name}) a été supprimé.",
+ "revoked": "Record ({name}) has been revoked.",
"multi": {
"deleted": "Les éléments sélectionnés ont été supprimés ({count})."
},
"sent": "Votre message a été envoyé."
},
-
"search": {
"_": "Chercher",
"filter": "Filtre",
@@ -180,23 +174,18 @@
"selected": "Enregistrements sélectionnés",
"none": "Aucun enregistrement trouvé"
},
-
"redirect": "Rediriger vers une autre entrée",
-
"selected": "{count} éléments sélectionnés",
-
"not": {
"assigned": "Non attribué",
"found": "Non trouvé",
"provided": "Non renseigné",
"selected": "Non sélectionné"
},
-
"json": {
"_": "JSON brut",
"title": "Editeur de contenu JSON"
},
-
"file": {
"csv": "Fichier CSV à importer"
}
diff --git a/packages/i18n/src/admin/fr/fdbs.json b/packages/i18n/src/admin/fr/fdbs.json
index 7a7b1a076e..3c7a1fef4f 100644
--- a/packages/i18n/src/admin/fr/fdbs.json
+++ b/packages/i18n/src/admin/fr/fdbs.json
@@ -6,14 +6,16 @@
"create": "Ajouter une base de données",
"edit": "Modifier la base de données",
"delete": "Supprimer la base de données",
-
"showGlobalName": "Afficher le nom global",
-
+ "food-list": {
+ "_": "Food list",
+ "title": "Food list",
+ "tab": "Food list"
+ },
"search": {
"_": "Chercher",
"title": "Chercher des catégories et des aliments"
},
-
"categories": {
"_": "Catégorie",
"title": "Catégories",
@@ -22,6 +24,7 @@
"noCategory": "Non catégorisé",
"alreadyIncluded": "La catégorie '{code}' est déjà présente dans la liste actuelle.",
"none": "Pas de catégorie trouvée pour cette recherche.",
+ "copy": "Copy category",
"global": {
"_": "Paramètre des catégories globales",
"code": "Code de la catégorie",
@@ -40,10 +43,11 @@
"_": "Catégories parent"
}
},
-
"foods": {
"_": "Aliment",
"title": "Aliments",
+ "add": "Add food",
+ "copy": "Copy food",
"global": {
"_": "Paramètres pour les aliments globaux",
"code": "Code de l'aliment",
@@ -62,7 +66,13 @@
"_": "Catégories parent"
}
},
-
+ "locales": {
+ "_": "Use in locales",
+ "title": "Use in locales",
+ "description": "Food is included in {count} locales.",
+ "add": "Add locale",
+ "remove": "Remove locale"
+ },
"attributes": {
"_": "Attributs",
"title": "Attributs",
@@ -72,13 +82,12 @@
"readyMealOption": "Etait-ce un repas tout fait ou un plat préparé ?",
"reasonableAmount": "Quantité raisonnable (g/ml)",
"useInRecipes": {
- "_": "Utiliser pour les recettes",
"0": "Utiliser partout",
"1": "Utiliser seulement comme aliment",
- "2": "Utiliser seulement comme ingrédient d'une recette"
+ "2": "Utiliser seulement comme ingrédient d'une recette",
+ "_": "Utiliser pour les recettes"
}
},
-
"nutrients": {
"_": "Enregistrement de la table nutritionnelle",
"title": "Enregistrements de la table nutritionnelle",
@@ -87,35 +96,29 @@
"alreadyIncluded": "L'enregistrement de la table nutritionnelle '{id}' est déjà inclus dans la liste actuelle.",
"none": "Aucun enregistrement de table nutritionnelle n'a été trouvé pour cette recherche."
},
-
"associatedFoods": {
"_": "Aliment associé",
"title": "Aliments associés",
"add": "Ajouter un aliment associé",
"edit": "Modifier un aliment associé",
"remove": "Enlever un aliment associé",
-
"association": "Association",
"genericName": "Nom générique",
"text": "Texte",
"linkAsMain": "Lier à l'aliment principal",
"multiple": "Autoriser plusieurs aliments"
},
-
"portionSizes": {
"_": "Méthode de quantification",
"title": "Méthodes de quantification",
"add": "Ajouter une méthode de quantification",
"edit": "Modifier la méthode de quantification",
"remove": "Enlever la méthode de quantification",
-
"parameters": "Paramètres",
"noParameters": "La méthode ne présente pas plus de paramètres.",
"description": "Description",
- "imageUrl": "URL de l'image",
"useForRecipes": "Utiliser pour les recettes",
"conversionFactor": "Facteur de conversion",
-
"methods": {
"_": "Méthode de quantification",
"as-served": {
@@ -158,6 +161,9 @@
"_": "Pizza",
"imageMapLabels": "Libellés de l'image à curseur"
},
+ "pizza-v2": {
+ "_": "Pizza V2"
+ },
"standard-portion": {
"_": "Portion standard",
"unit": "Unité",
diff --git a/packages/i18n/src/admin/fr/feedback-schemes.json b/packages/i18n/src/admin/fr/feedback-schemes.json
index f9b3cb624d..8b6305ddff 100644
--- a/packages/i18n/src/admin/fr/feedback-schemes.json
+++ b/packages/i18n/src/admin/fr/feedback-schemes.json
@@ -7,14 +7,12 @@
"delete": "Supprimer la configuration du bilan",
"load": "Charger à partir de la configuration",
"none": "Aucune configuration de bilan trouvée",
-
"types": {
"_": "Type de bilan",
"title": "Types de bilan",
"default": "Défaut",
"playful": "Joueur"
},
-
"outputs": {
"_": "Sortie",
"title": "Sorties",
@@ -22,7 +20,6 @@
"email": "Adresse mail",
"download": "Télécharger"
},
-
"physicalDataFields": {
"_": "Champs pour les données physiques",
"title": "Champs pour les données physiques",
@@ -35,50 +32,41 @@
"birthdate": "Date de naissance",
"weightTarget": "Poids cible"
},
-
"sections": {
"_": "Section",
"title": "Sections"
},
-
"copy": {
"_": "Copier",
"title": "Copier la configuration du bilan",
"name": "Nouveau nom de configuration du bilan"
},
-
"preview": {
"_": "Prévisualiser",
"title": "Prévisualisation du bilan"
},
-
"ranges": {
"_": "Intervalle",
"start": "Début",
"end": "Fin"
},
-
"age": {
"_": "Age",
"range": "Intervalle d'âge",
"start": "Début de l'intervalle d'âge",
"end": "Fin de l'intervalle d'âge"
},
-
"height": {
"_": "Hauteur"
},
-
"weight": {
"_": "Poids"
},
-
"sexes": {
"_": "Sexe",
"m": "Masculin",
"f": "Féminin"
},
-
"sentiments": {
"_": "Appréciation",
"title": "Appréciations",
@@ -93,25 +81,25 @@
"bit_high": "Un peu haut",
"too_high": "Trop haut"
},
-
- "characterTypes": {
- "_": "Type de caractères",
- "battery": "Energie",
- "bread": "Pain",
- "candy": "Bonbon",
- "salmon": "Saumon",
- "sausage": "Saucisse",
- "egg": "Œuf",
- "apple": "Pomme",
- "strawberry": "Fraise",
+ "images": {
+ "_": "Image",
+ "battery": "Battery",
+ "beef": "Beef",
+ "bread": "Bread",
+ "candy": "Candy",
+ "salmon": "Salmon",
+ "sausage": "Sausage",
+ "egg": "Egg",
+ "apple": "Apple",
+ "strawberry": "Strawberry",
"burger": "Burger",
- "fries": "Frites",
- "milk": "Lait",
- "iron": "Fer",
+ "fries": "Fries",
+ "milk": "Milk",
+ "iron": "Iron",
"folate": "Folate",
- "co2": "CO2"
+ "co2": "CO2",
+ "fruitVeg": "Fruit & Vegetables"
},
-
"characterSentimentTypes": {
"_": "Type d'appréciation du caractère",
"title": "Types d'appréciations du caractère",
@@ -120,7 +108,6 @@
"happy": "Heureux",
"exciting": "Excité"
},
-
"nutrientRuleTypes": {
"_": "Type de règle nutritionnelle",
"title": "Types de règles nutritionnelles",
@@ -129,7 +116,6 @@
"per_unit_of_weight": "Par unité de poids",
"range": "Intervalle"
},
-
"colors": {
"_": "Couleur",
"title": "Liste des couleurs",
@@ -140,12 +126,10 @@
"required": "La valeur doit être un entier"
}
},
-
"physicalActivityLevels": {
"_": "Niveau d'activité physique",
"title": "Niveaux d'activité physique"
},
-
"top-foods": {
"_": "Aliments principaux",
"title": "Aliments principaux",
@@ -156,7 +140,6 @@
},
"other": "Autre aliment"
},
-
"meals": {
"_": "Repas",
"title": "Repas",
@@ -198,7 +181,6 @@
}
}
},
-
"cards": {
"_": "Carte",
"title": "Cartes",
@@ -208,11 +190,12 @@
"remove": "Enlever la carte",
"type": "Type de carte",
"options": "Options de carte",
+ "color": "Card color",
"name": "Nom de la carte",
"required": "Le nom de la carte est requis.",
+ "summary": "Card summary",
"description": "Description",
"showRecommendations": "Montrer les recommandations du bilan",
-
"tabs": {
"general": "Général",
"content": "Contenu",
@@ -221,7 +204,6 @@
"nutrients": "Nutriments",
"json": "JSON"
},
-
"character": {
"title": "Lettre",
"subtitle": "Lettre / Nutriment"
@@ -234,7 +216,6 @@
"title": "Cinq par jour",
"subtitle": "Retour sur les 'cinq par jour'"
},
-
"thresholds": {
"_": "Seuil",
"title": "Seuils",
@@ -243,14 +224,12 @@
"enabled": "Autoriser un seuil",
"message": "Message d'avertissement"
},
-
"unit": {
"name": "Nom de l'unité",
"description": "Description de l'unité",
"required": "Le nom de l'unité est requis."
}
},
-
"demographic-groups": {
"_": "Groupe démographique",
"title": "Groupes démographiques",
@@ -258,13 +237,11 @@
"create": "Nouveau groupe démographique",
"edit": "Modifier le groupe démographique",
"remove": "Enlever le groupe démographique",
-
"tabs": {
"general": "Général",
"sectors": "Secteurs d'échelonnage",
"json": "JSON"
},
-
"sectors": {
"_": "Secteurs d'échelonnage",
"title": "Secteurs d'échelonnage",
@@ -272,7 +249,6 @@
"remove": "Enlever le secteur d'échelonnage"
}
},
-
"henry-coefficients": {
"_": "Coefficient de Henry",
"title": "Coefficients de Henry",
@@ -280,9 +256,12 @@
"create": "Nouveau coefficient de Henry",
"edit": "Modifier le coefficient de Henry",
"remove": "Enlever le coefficient de Henry",
-
"constant": "Constante",
"weightCoefficient": "Coefficient de poids",
"heightCoefficient": "Coefficient de taille"
+ },
+ "rating": {
+ "_": "Rating",
+ "title": "Rating"
}
}
diff --git a/packages/i18n/src/admin/fr/guide-images.json b/packages/i18n/src/admin/fr/guide-images.json
index c3e98165a9..b5470a1f3a 100644
--- a/packages/i18n/src/admin/fr/guide-images.json
+++ b/packages/i18n/src/admin/fr/guide-images.json
@@ -5,7 +5,6 @@
"create": "Ajouter une photo étalon",
"edit": "Modifier la photo étalon",
"delete": "Supprimer la photo étalon",
-
"id": "Identifiant de la photo étalon",
"objects": {
"_": "Objet de la photo étalon",
diff --git a/packages/i18n/src/admin/fr/image-maps.json b/packages/i18n/src/admin/fr/image-maps.json
index 616c9b1b38..e0929b8a65 100644
--- a/packages/i18n/src/admin/fr/image-maps.json
+++ b/packages/i18n/src/admin/fr/image-maps.json
@@ -5,7 +5,6 @@
"create": "Ajouter une photo à curseur",
"edit": "Modifier la photo à curseur",
"delete": "Supprimer la photo à curseur",
-
"id": "Identifiant de la photo à curseur",
"baseImage": "Fichier de la photo à curseur",
"objects": {
diff --git a/packages/i18n/src/admin/fr/jobs.json b/packages/i18n/src/admin/fr/jobs.json
index 38a198e84a..f011a31d8e 100644
--- a/packages/i18n/src/admin/fr/jobs.json
+++ b/packages/i18n/src/admin/fr/jobs.json
@@ -10,12 +10,10 @@
"message": "Message",
"params": "Paramètres de la tâche",
"stackTrace": "Message d'erreur",
-
"repeat": {
"_": "Répéter la tâche",
"confirm": "Placer la tâche dans la file d'attente"
},
-
"types": {
"_": "Types de tâches",
"CleanRedisStore": {
@@ -29,24 +27,55 @@
"CleanStorageFiles": {
"_": "Nettoyer les fichiers de stockage"
},
- "PurgeRefreshTokens": {
- "_": "Supprimer les jetons de rafraîchissement expirés"
+ "FeedbackSchemesSync": {
+ "_": "Feedback schemes - Synchronize schemes"
+ },
+ "PurgeExpiredTokens": {
+ "_": "Purge expired access/refresh tokens"
},
"LanguageTranslationsSync": {
"_": "Langue - Synchroniser les traductions"
},
+ "LocaleCopy": {
+ "_": "Locale - Copy data",
+ "localeId": "Locale ID",
+ "sourceLocaleId": "Source Locale ID",
+ "subTasks": {
+ "_": "Subtasks",
+ "associatedFoods": "Associated foods",
+ "brands": "Brands",
+ "categories": "Categories",
+ "foods": "Foods",
+ "foodGroups": "Food groups",
+ "recipeFoods": "Recipe foods",
+ "searchPopularity": "Search - popularity",
+ "searchFixedRanking": "Search - fixed ranking",
+ "splitLists": "Split lists",
+ "splitWords": "Split words",
+ "synonymSets": "Synonym sets"
+ }
+ },
"LocaleFoodNutrientMapping": {
"_": "Régional - Exporter le mapping des nutriments",
"localeId": "Identifiant régional"
},
"LocaleFoodRankingUpload": {
"_": "Régional - téléchargement du CSV de classement d'aliments",
- "file": "fichier CSV"
+ "file": "fichier CSV",
+ "targetAlgorithm": "Sorting algorithm type to update",
+ "warningTitle": "Warning: risk of data loss. Proceed with caution.",
+ "warningP1": "The food frequency data is automatically updated by the system as new recalls are received.",
+ "warningP2": "Uploading frequency data from a CSV file will override existing records in the database, potentially leading to data loss.",
+ "warningP3": "This feature is intended only for initialising new locales or fixing issues with existing frequency data.",
+ "warningP4": "Please double-check that you are in the correct locale before uploading the data."
},
"LocaleFoods": {
"_": "Régional - Exporter les aliments",
"localeId": "Identifiant régional"
},
+ "LocaleIndexBuild": {
+ "_": "Locale - Rebuild Food Indexes for modified locales"
+ },
"NutrientTableMappingImport": {
"_": "Tableau des nutriments - Importer le mapping de la BDD nutritionnelle",
"file": "fichier CSV"
@@ -59,6 +88,10 @@
"_": "Chercher - Mettre à jour les compteurs de popularité",
"foodCodes": "Codes des aliments"
},
+ "ResourceExport": {
+ "_": "Resource - Export data",
+ "resource": "Resource"
+ },
"SurveyAuthUrlsExport": {
"_": "Enquête - Exporter les URL d'identification",
"surveyId": "Identifiant de l'enquête"
@@ -71,15 +104,20 @@
"_": "Survey - Event notification"
},
"SurveyFeedbackNotification": {
- "_": "Enquête - Envoyer le bilan du répondant"
+ "_": "Enquête - Envoyer le bilan du répondant",
+ "surveyId": "Survey ID"
},
"SurveyHelpRequestNotification": {
- "_": "Enquête - Notification de demande d'assistance "
+ "_": "Enquête - Notification de demande d'assistance ",
+ "surveyId": "Survey ID"
},
"SurveyNutrientsRecalculation": {
"_": "Enquête - Carculer à nouveau les nutriments",
"surveyId": "Identifiant de l'enquête"
},
+ "SurveyRatingsExport": {
+ "_": "Survey - Ratings export"
+ },
"SurveyRespondentsImport": {
"_": "Enquête - Importer les répondants",
"file": "fichier CSV"
diff --git a/packages/i18n/src/admin/fr/languages.json b/packages/i18n/src/admin/fr/languages.json
index 83428a580f..a4b6f24b3a 100644
--- a/packages/i18n/src/admin/fr/languages.json
+++ b/packages/i18n/src/admin/fr/languages.json
@@ -7,7 +7,6 @@
"create": "Ajouter une langue",
"edit": "Modifier la langue",
"delete": "Supprimer la langue",
-
"englishName": "Nom anglais",
"localName": "Nom local",
"countryFlagCode": "Code du drapeau du pays",
@@ -16,8 +15,6 @@
"ltr": "Gauche à droite",
"rtl": "Droite à gauche"
},
- "foodIndexLanguageBackend": "Langue d'arrière-plan pour l'index alimentaire",
-
"translations": {
"_": "Traduction",
"title": "Traductions",
@@ -47,7 +44,6 @@
"survey": "Enquête",
"validation": "Validation"
},
-
"created": "La traduction linguistique ({name}) a été créée.",
"updated": "La traduction linguistique ({name}) a été mise à jour.",
"deleted": "La traduction linguistique ({name}) a été supprimée.",
diff --git a/packages/i18n/src/admin/fr/locales.json b/packages/i18n/src/admin/fr/locales.json
index 717bc517f7..9ab860ab98 100644
--- a/packages/i18n/src/admin/fr/locales.json
+++ b/packages/i18n/src/admin/fr/locales.json
@@ -7,45 +7,42 @@
"create": "Ajouter une version régionale",
"edit": "Modifier la version régionale",
"delete": "Supprimer la version régionale",
-
"prototypeLocaleId": "Version régionale prototypique",
"englishName": "Nom anglais",
"localName": "Nom régional",
"respondentLanguageId": "Langage de l'interface utilisateur du répondant",
"adminLanguageId": "Langage de l'interface utilisateur de l'administrateur",
"countryFlagCode": "Code du drapeau du pays",
-
+ "foodIndex": {
+ "_": "Food index",
+ "enabled": "Food index enabled",
+ "languageBackend": "Food index language backend"
+ },
"split-lists": {
"_": "Découper les listes",
"title": "Découper les listes",
"tab": "Découper les listes",
"add": "Ajouter une liste à découper",
"remove": "Enlever une liste à découper",
-
"firstWord": "Premier mot",
"words": "Liste de mots (délimités par des espaces)"
},
-
"split-words": {
"_": "Mots à découper",
"title": "Mots à découper",
"tab": "Mots à découper",
"add": "Ajouter un mot à découper",
"remove": "Enlever un mot à découper",
-
"words": "Liste de mots (délimités par des espaces)"
},
-
"synonym-sets": {
"_": "Série de synonymes",
"title": "Séries de synonymes",
"tab": "Séries de synonymes",
"add": "Ajouter une série de synonymes",
"remove": "Enlever une série de synonymes",
-
"synonyms": "Synonymes (délimités par des espaces)"
},
-
"recipe-foods": {
"_": "Séries d'aliments pour des recettes",
"title": "Séries d'aliments pour des recettes",
@@ -61,9 +58,9 @@
"description": "Description de l'étape",
"ingredientsCategory": "Catégorie des ingrédients de l'étape",
"order": "Ordre des étapes",
- "repeat": "Beaucoup d'ingrédients"
+ "repeat": "Beaucoup d'ingrédients",
+ "require": "Required"
},
-
"food-ranking": {
"_": "Classement des aliments",
"title": "Classement des aliments",
@@ -72,7 +69,6 @@
"upload": "Charger le CSV de classement des aliments",
"description": "Pour permettre au \"predetermined order\" algorithme de classement des aliments dans les études utilisant cette version régionale, \n' chargez une feuille de calcul de classement des aliments."
},
-
"tasks": {
"_": "Mission régionale",
"title": "Missions régionales",
diff --git a/packages/i18n/src/admin/fr/nutrient-tables.json b/packages/i18n/src/admin/fr/nutrient-tables.json
index 8fb8325d4c..772d077dc6 100644
--- a/packages/i18n/src/admin/fr/nutrient-tables.json
+++ b/packages/i18n/src/admin/fr/nutrient-tables.json
@@ -6,7 +6,6 @@
"edit": "Modifier le tableau nutritionnel",
"delete": "Supprimer le tableau nutritionnel",
"id": "Identifiant du tableau nutritionnel",
-
"mapping": {
"source": {
"_": "Mapping du tableau source",
@@ -30,7 +29,6 @@
"columnOffset": "Colonne CSV"
}
},
-
"tasks": {
"_": "Missions",
"title": "Missions sur les tables nutritionnelles",
diff --git a/packages/i18n/src/admin/fr/nutrient-types.json b/packages/i18n/src/admin/fr/nutrient-types.json
index bb02879084..e560daca93 100644
--- a/packages/i18n/src/admin/fr/nutrient-types.json
+++ b/packages/i18n/src/admin/fr/nutrient-types.json
@@ -9,10 +9,8 @@
"label": "Libellé du type de nutriment",
"current": "Types de nutriments actuels",
"available": "Types de nutriments disponibles",
-
"id": "Identifiant du type de nutriment",
"kcalPerUnit": "Kcal par unité",
-
"reset": {
"_": "Réinitialiser les types de nutriments",
"text": "Réinitialiser les types de nutriments et leur assigner leurs valeurs par défaut"
diff --git a/packages/i18n/src/admin/fr/nutrient-units.json b/packages/i18n/src/admin/fr/nutrient-units.json
index c81e08645e..bc29ad6ab8 100644
--- a/packages/i18n/src/admin/fr/nutrient-units.json
+++ b/packages/i18n/src/admin/fr/nutrient-units.json
@@ -6,7 +6,6 @@
"create": "Ajouter une unité de nutriment",
"edit": "Modifier l'unité de nutriment",
"remove": "Enlever l'unité de nutriment",
-
"id": "Identifiant de l'unité du nutriment",
"symbol": "Symbole"
}
diff --git a/packages/i18n/src/admin/fr/permissions.json b/packages/i18n/src/admin/fr/permissions.json
index cce2c2b63e..ca1dd85448 100644
--- a/packages/i18n/src/admin/fr/permissions.json
+++ b/packages/i18n/src/admin/fr/permissions.json
@@ -6,14 +6,12 @@
"create": "Ajouter une autorisation",
"edit": "Modifier l'autorisation",
"delete": "Supprimer l'autorisation",
-
"groups": {
"global": "Global",
"resources": "Ressources",
"surveys": "Enquêtes",
"fdbs": "Bases de données alimentaires"
},
-
"roles": {
"_": "Rôle",
"title": "Rôles",
diff --git a/packages/i18n/src/admin/fr/roles.json b/packages/i18n/src/admin/fr/roles.json
index 15dc36a59e..fc522564d1 100644
--- a/packages/i18n/src/admin/fr/roles.json
+++ b/packages/i18n/src/admin/fr/roles.json
@@ -6,7 +6,6 @@
"create": "Ajouter un rôle",
"edit": "Modifier le rôle",
"delete": "Supprimer le rôle",
-
"permissions": {
"_": "Autorisation",
"title": "Autorisations",
diff --git a/packages/i18n/src/admin/fr/securables.json b/packages/i18n/src/admin/fr/securables.json
index e65422ff45..447d1fa9a2 100644
--- a/packages/i18n/src/admin/fr/securables.json
+++ b/packages/i18n/src/admin/fr/securables.json
@@ -2,17 +2,14 @@
"_": "Sécurité",
"title": "Sécurité",
"tab": "Sécurité",
-
"add": "Ajouter un accès utilisateur",
"edit": "Modifier l'accès utilisateur",
"search": "Chercher un utilisateur",
"create": "Créer un nouvel utilisateur",
-
"owner": {
"_": "Propriétaire",
"title": "Propriété"
},
-
"actions": {
"_": "Action ressource",
"title": "Actions ressources",
@@ -21,15 +18,13 @@
"delete": "Supprimer l'enregistrement",
"copy": "Copier l'enregistrement",
"securables": "Sécurité",
-
+ "use": "Use record",
"cards": "Cartes",
"top-foods": "Aliments majoritaires",
"meals": "Repas",
"demographic-groups": "Groupes démographiques",
"henry-coefficients": "Coefficients de Henry",
-
"translations": "Traductions",
-
"food-list": "Liste d'aliments",
"food-ranking": "Classement d'aliments",
"split-lists": "Séparer les listes",
@@ -37,14 +32,18 @@
"split-words": "Séparer les mots",
"synonym-sets": "Séries de synonymes",
"tasks": "Tâches",
-
"prompts": "Invites",
"data-export": "Export de données",
-
"overrides": "Dérogations",
"respondents": "Répondants",
"sessions": "Sessions",
"submissions": "Soumissions",
"support": "Aide"
+ },
+ "visibility": {
+ "_": "Visibility",
+ "title": "Record visibility",
+ "public": "Public",
+ "restricted": "Restricted"
}
}
diff --git a/packages/i18n/src/admin/fr/standard-units.json b/packages/i18n/src/admin/fr/standard-units.json
index 3f97b56427..ee2b54febf 100644
--- a/packages/i18n/src/admin/fr/standard-units.json
+++ b/packages/i18n/src/admin/fr/standard-units.json
@@ -6,18 +6,15 @@
"create": "Ajouter une unité standard",
"edit": "Modifier l'unité standard",
"remove": "Enlever l'unité standard",
-
"id": "Identifiant de l'unité standard",
"estimateIn": "Estimer en",
"howMany": "Combien",
-
"categories": {
"_": "Catégorie",
"tab": "Catégories",
"title": "Catégories",
"subtitle": "Catégories quantifiées en unités standards"
},
-
"foods": {
"_": "Aliment",
"tab": "Aliments",
diff --git a/packages/i18n/src/admin/fr/survey-scheme-prompts.json b/packages/i18n/src/admin/fr/survey-scheme-prompts.json
index 425c8f3be7..3a12d75f32 100644
--- a/packages/i18n/src/admin/fr/survey-scheme-prompts.json
+++ b/packages/i18n/src/admin/fr/survey-scheme-prompts.json
@@ -6,7 +6,6 @@
"create": "Ajouter une invite dans la configuration",
"edit": "Modifier l'invite de la configuration",
"delete": "Supprimer l'invite de la configuration",
-
"editTemplate": "Modifier l'invite de la configuration",
"sync": {
"_": "Synchronisation",
diff --git a/packages/i18n/src/admin/fr/survey-schemes.json b/packages/i18n/src/admin/fr/survey-schemes.json
index f671fe8c6b..76688513c5 100644
--- a/packages/i18n/src/admin/fr/survey-schemes.json
+++ b/packages/i18n/src/admin/fr/survey-schemes.json
@@ -8,18 +8,15 @@
"delete": "Supprimer la configuration d'enquête",
"load": "Charger depuis la configuration",
"none": "Aucune struture d'enquête trouvée",
-
"copy": {
"_": "Copier",
"title": "Copier la configuration de l'enquête",
"name": "Nom de la nouvelle configuration de l'enquête"
},
-
"types": {
"_": "Type",
"default": "Défaut"
},
-
"meals": {
"_": "Repas",
"title": "Repas par défaut",
@@ -36,7 +33,6 @@
"unique": "Le nom du repas existe déjà dans une liste actuelle."
}
},
-
"actions": {
"_": "Action",
"title": "Actions",
@@ -63,6 +59,7 @@
"review": "Analyse",
"addFood": "Ajouter un aliment",
"addMeal": "Ajouter un repas",
+ "changeFood": "Change food",
"deleteFood": "Supprimer l'aliment",
"deleteMeal": "Supprimer le repas",
"editFood": "Modifier l'aliment",
@@ -79,7 +76,6 @@
"text": "Texte"
}
},
-
"conditions": {
"_": "Condition",
"title": "Conditions",
@@ -225,6 +221,10 @@
"name": {
"_": "Nom de l'invite",
"hint": "Nom interne descriptif pour faciliter la compréhension "
+ },
+ "group": {
+ "_": "Prompt group",
+ "hint": "Group ID to collate prompts together"
}
},
"type": "Type d'invite",
@@ -257,11 +257,20 @@
"noPrompts": "Pas d'invites de taille de portion disponibles pour cette section"
},
"badges": "Montrer les badges de quantité",
+ "foodBrowser": {
+ "_": "Food browser settings",
+ "categoriesFirst": {
+ "_": "Show categories first in the list",
+ "browse": "Food browse list",
+ "search": "Food search list"
+ }
+ },
"imageMap": {
"_": "Paramètres des photos à curseur",
"labels": "Montrer les libellés",
"pinchZoom": "Montrer PinchZoom pour mobile UI"
},
+ "multiple": "Allow multiple items to be selected",
"label": "Libellé de la liste d'options",
"leftovers": "Autoriser les restes",
"linkedQuantity": {
@@ -279,9 +288,19 @@
},
"slider": {
"_": "Paramètres du curseur",
- "initial": "Valeur initiale",
- "min": "Valeur minimale",
- "max": "Valeur maximale",
+ "current": {
+ "label": "Current label",
+ "value": "Current value",
+ "size": "Label size"
+ },
+ "min": {
+ "label": "Minimum label",
+ "value": "Minimum value"
+ },
+ "max": {
+ "label": "Maximum label",
+ "value": "Maximum value"
+ },
"step": "Incrémentation"
},
"timePicker": {
@@ -312,7 +331,6 @@
"title": "Sauvegarder l'invite en tant que modèle"
}
},
-
"associated-foods-prompt": {
"title": "Aliments associés",
"subtitle": "Suggérer des aliments souvent consommés ensemble",
@@ -325,7 +343,11 @@
},
"final-prompt": {
"title": "Dernier",
- "subtitle": "Dernière page avant soumission"
+ "subtitle": "Dernière page avant soumission",
+ "rating": {
+ "_": "Enable survey rating collection",
+ "title": "Survey rating"
+ }
},
"food-search-prompt": {
"title": "Recherche dans la base de données alimentaire",
@@ -340,11 +362,7 @@
},
"meal-duration-prompt": {
"title": "Durée du repas",
- "subtitle": "Demander la durée du repas",
- "initial": "Durée du repas initiale",
- "min": "Durée du repas minimale",
- "max": "Durée du repas maximale",
- "step": "Etape durée du repas"
+ "subtitle": "Demander la durée du repas"
},
"meal-gap-prompt": {
"title": "Intervalle entre deux repas",
@@ -364,6 +382,10 @@
"redirect-prompt": {
"title": "Rediriger",
"subtitle": "Dernière page pour l'utilisateur redirigeant sur le site externe",
+ "rating": {
+ "_": "Enable survey rating collection",
+ "title": "Survey rating"
+ },
"url": {
"_": "URL de base",
"title": "Options d'URL",
@@ -380,6 +402,12 @@
"urlAuthToken": "Jeton d'authentification"
}
},
+ "target": {
+ "_": "Target",
+ "subtitle": "Choose where to open the URL",
+ "_self": "Open in the same window",
+ "_blank": "Open in a new window"
+ },
"timer": {
"_": "Nombre de secondes avant d'être redirigé",
"title": "Options de minuteur"
@@ -405,10 +433,10 @@
"subtitle": "Choisissez les options que vous voulez voir apparaître pour la dernière relecture.",
"false": "Pas de relecture",
"scroll": "Scroller jusqu'en bas pour passer la relecture",
- "checkbox": "Cocher une case pour passer la relecture"
+ "checkbox": "Cocher une case pour passer la relecture",
+ "onecheckbox": "Tick one survey check to pass review"
}
},
-
"info-prompt": {
"title": "Information",
"subtitle": "Afficher un message ou des consignes et demander confirmation"
@@ -434,6 +462,14 @@
"title": "Choix unique",
"subtitle": "Demander de choisir un élément d'une liste"
},
+ "select-prompt": {
+ "title": "Select",
+ "subtitle": "Ask to choose value from select box"
+ },
+ "slider-prompt": {
+ "title": "Slider",
+ "subtitle": "Ask to choose value on slider"
+ },
"textarea-prompt": {
"title": "Texte libre",
"subtitle": "Demander d'écrire dans un champ de texte libre"
@@ -442,7 +478,6 @@
"title": "Choix OUI/NON",
"subtitle": "Demander de choisir oui ou non"
},
-
"as-served-prompt": {
"title": "Photo de portions",
"subtitle": "Choisir la méthode \"as served\" pour estimer la taille de la portion"
@@ -480,6 +515,10 @@
"title": "Pizza",
"subtitle": "Choisir la méthode \"pizza\" pour estimer la taille de la portion"
},
+ "pizza-v2-prompt": {
+ "title": "Pizza V2",
+ "subtitle": "Use the \"pizza v2\" method to estimate the portion size"
+ },
"parent-food-portion-prompt": {
"title": "Portion d'aliment parent",
"subtitle": "Choisir la méthode\"portion of parent food\" pour estimer la taille de la portion",
diff --git a/packages/i18n/src/admin/fr/surveys.json b/packages/i18n/src/admin/fr/surveys.json
index 5b90967ef7..7487fced6d 100644
--- a/packages/i18n/src/admin/fr/surveys.json
+++ b/packages/i18n/src/admin/fr/surveys.json
@@ -6,7 +6,6 @@
"create": "Ajouter une enquête",
"edit": "Modifier l'enquête",
"delete": "Supprimer l'enquête",
-
"id": "Identifiant de l'enquête",
"name": "Nom de l'enquête",
"states": {
@@ -19,11 +18,12 @@
"startDate": "Date de début",
"endDate": "Date de fin",
"supportEmail": "Adresse mail d'aide",
- "authUrl": {
- "_": "Paramètres de l'URL d'authentification",
- "domainOverride": "Modifier le domaine",
- "tokenCharset": "Jeton série de caractères",
- "tokenLength": "Longueur du jeton"
+ "auth": {
+ "_": "Authentication settings",
+ "captcha": "Captcha verification",
+ "urlDomainOverride": "URL Domain override",
+ "urlTokenCharset": "URL Token character set",
+ "urlTokenLength": "URL Token length"
},
"externalComm": {
"_": "Communication externe",
@@ -38,13 +38,80 @@
"search": {
"_": "Options de recherche",
"collectData": "Collect search data",
+ "maxResults": "Maximum number of food results",
+ "sorting": "Sorting",
+ "spellingCorrection": "Spelling correction",
"sortingAlgorithm": "Algorithme de tri",
+ "matchQuality": "Match quality",
+ "matchQualityCriteria": "Match quality criteria",
"matchScoreWeight": "Poids du score de correspondance",
+ "firstWordCost": "First word",
+ "wordOrderCost": "Word order",
+ "wordDistanceCost": "Word distance",
+ "unmatchedWordCost": "Word count",
+ "foodOrdering": "Food ordering",
+ "enableEditDistance": "Use edit distance spelling correction",
+ "minWordLength1": "Minimum word length for 1 correction",
+ "minWordLength2": "Minimum word length for 2 corrections",
+ "enablePhonetic": "Use phonetic spelling correction",
+ "minWordLengthPhonetic": "Minimum word length for phonetic spelling correction",
+ "spellingCorrectionPreference": "Preferred spelling correction method",
+ "spellingCorrectionOptions": {
+ "phonetic": "Phonetic",
+ "edit-distance": "Edit distance",
+ "both": "Both"
+ },
+ "relevantCategories": "Relevant categories",
+ "enableRelevantCategories": "Show relevant categories",
+ "relevantCategoryDepth": "Relevant category depth",
"algorithms": {
"paRules": "Associations par paires (machine learning)",
"popularity": "Popularité (fréquence de déclaration)",
"globalPop": "Popularité globale (fréquence de déclaration)",
"fixed": "Ordre prédéterminé"
+ },
+ "information": {
+ "matchScoreWeightInfo": {
+ "title": "Sorting preference",
+ "p1": "Intake24 employs two methods to determine the priority of foods in the search results list:",
+ "foodOrdering": "Food ordering is the ordering of foods in the database according to the selected \"Food ordering method\" option, typically prioritising items based on how frequently they are reported. The more commonly reported foods are listed at the top.",
+ "matchQuality": "Match quality is the estimation of how closely the user's input matches the name of a food from the database. This is based on factors like the matching word count and word order consistency. For instance, \"boiled potato\" is an exact match for an entry labelled \"Boiled potato\" in the database, but it is not as good of a match for \"baked potato\" (where only \"potato\" matches but not \"boiled\") or \"Potato, boiled\" (where the words match, but the order differs).",
+ "p2": "This setting controls how these values are combined to produce the final ordering of the search results.",
+ "p3": "If the slider is adjusted towards \"food ordering\", the sorting will more closely reflect the food ordering (reporting frequency or predetermined order) data. If the slider is moved towards \"match quality\", then the sorting will prioritize more accurate matching of the user input."
+ },
+ "sortingAlgorithmInfo": {
+ "title": "Food ordering method",
+ "p1": "The food ordering method is used to determine relative priorities of foods in the database.",
+ "popularity": "Popularity (reporting frequency) gives precedence to frequently reported foods. Frequency data is constantly gathered and updated with each recall submission, improving the data quality as more submissions are received. In this mode, the frequency data is associated with a specific locale and is not shared across locales.",
+ "globalPopularity": "Global popularity (reporting frequency) is similar to the above, but the data is collected globally and shared across locales. This method is not recommended because in practice food codes are rarely shared across locales.",
+ "predeterminedOrder": "Predetermined order assigns a fixed priority value to each food item. Those with higher priorities appear at the top of the search results, irrespective of their reporting frequencies. Unlike methods based on reporting frequency, this order remains static once uploaded and is not dynamically updated as more recall submissions are received."
+ },
+ "matchQualityInfo": {
+ "title": "Match quality criteria",
+ "p1": "These settings determine the importance assigned to specific criteria by the component of the food search algorithm that assesses the similarity between the user input and food descriptions in the database.",
+ "p2": "Each criterion is evaluated independently, and their results are then aggregated. This cumulative value represents the match cost. The higher the cost, the lower the quality of the match. Search results having the lowest cost are listed at the top.",
+ "p3": "The higher the slider value for the criterion, the greater its impact on the final match cost. When a slider is set to zero, the related criterion is ignored.",
+ "firstWord": "First word gives precedence to the initial word in the user input. If the initial word is not found in the food name, this penalty is applied (but other words can still match).",
+ "wordOrder": "Word order penalises word order violations. For example, the input \"boiled potato\" will match \"potato, boiled\", but since the word order differs the word order penalty will be applied. This penalty can be applied multiple times for each violation of the word order in case of longer input.",
+ "wordDistance": "Word distance penalises violations of relative word distance (adjacency). For example, the input \"sweet chicken\" will match \"sweet and sour chicken\", but because the words that are adjacent in the user input are not adjacent in the food name, this penalty is applied.",
+ "wordCount": "Word count applies a penalty for each unmatched word. For example, the input \"boiled chicken\" will match \"sweet and sour chicken\", but this penalty will be applied because the word \"boiled\" is not found in the food name."
+ },
+ "spellingCorrectionInfo": {
+ "title": "Spelling correction",
+ "p1": "These settings control the spelling correction algorithms employed when an exact word match cannot be found.",
+ "editDistance": "Edit distance spelling correction: this algorithm compares words based on their spellings. Edit distance (also called Levenshtein distance) is a measure used to quantify the similarity between two words by calculating the minimum number of operations (character insertions, deletions, or substitutions) required to transform one word into the other.",
+ "minimumWordLength": "Minimum word length: Intake24 can identify words that are within the edit distance of up to 2 from each other. However, making even one or two changes to shorter words can result in misleading matches. For example, correcting \"cake\" to \"sage\" (edit distance 2: c→s, k→g) is unlikely to be helpful. To prevent this, the number of corrections can be restricted based on the length of the input word.",
+ "phonetic": "Phonetic spelling correction: the phonetic encoding algorithm converts words into phonetic representations, which are sequences of characters that reflect their pronunciation. This allows for easier comparison and matching of words based on their sounds rather than their spellings.",
+ "phoneticMinWordLength": "Minimum word length for phonetic spelling correction: similar to edit distance based spelling correction, phonetic encoding based spelling correction can be restricted based on the length of the input word to avoid unwanted matches.",
+ "preferredMethod": "Preferred spelling correction method: when set to \"Phonetic\" or \"Edit distance\", the respective method is applied first. If no matches are found, then the other method is tried. When set to \"Both\", both methods are always used, and their results are combined. This setting is only applicable when both methods are enabled."
+ },
+ "relevantCategoriesInfo": {
+ "title": "Relevant categories",
+ "p1": "This setting controls whether additional relevant categories are returned in the search results.",
+ "p2": "If this is turned off, only categories with names directly matching the search query will be returned. If this is turned on, the parent categories of the matching foods will also be included.",
+ "p3": "For example, if the search query is \"bananas\" and this feature is off, no categories will be shown because there is no category called \"Bananas\". If this feature is enabled, categories containing \"bananas\" (such as \"Fruit\") will be included.",
+ "relevantCategoryDepth": "Relevant category depth: controls how many levels of parent categories are included. If set to 0, only the direct parent categories will be included. If set to 1, then the parents of parent categories are included (for example, Pepsi → Soft drinks → Drinks) and so on."
+ }
}
},
"submissionLimits": {
diff --git a/packages/i18n/src/admin/fr/user.json b/packages/i18n/src/admin/fr/user.json
index 810915570b..30e2607a8c 100644
--- a/packages/i18n/src/admin/fr/user.json
+++ b/packages/i18n/src/admin/fr/user.json
@@ -5,24 +5,20 @@
"access": "Accès",
"profile": "Profile",
"settings": "Paramètres",
-
"name": "Nom",
"email": "Adresse mail",
"phone": "Téléphone",
"permissions": "Autorisations attribuées",
"roles": "Rôles attribués",
-
"languages": {
"_": "Langue",
"title": "Langues"
},
-
"jobs": {
"_": "Job",
"title": "Jobs",
"create": "New job"
},
-
"personalAccessTokens": {
"_": "Personal access token",
"title": "Personal access tokens",
@@ -32,7 +28,6 @@
"none": "No personal access token created.",
"save": "Store the token below securely. You won't be able to access it again."
},
-
"mfa": {
"_": "MFA",
"title": "Authentification à facteurs multiples",
diff --git a/packages/i18n/src/admin/fr/users.json b/packages/i18n/src/admin/fr/users.json
index 697f684614..ce862a768a 100644
--- a/packages/i18n/src/admin/fr/users.json
+++ b/packages/i18n/src/admin/fr/users.json
@@ -6,7 +6,6 @@
"create": "Ajouter un utilisateur",
"edit": "Modifier l'utilisateur",
"delete": "Supprimer l'utilisateur",
-
"id": "Identifiant de l'utilisateur",
"name": "Nom",
"simpleName": "Nom simple",
@@ -39,12 +38,10 @@
"title": "Rôles",
"tab": "Rôles"
},
-
"mfa": {
"_": "Authentification multi-facteurs",
"abbr": "2FA"
},
-
"notifications": {
"email": "Notifications mail",
"sms": "Notifications SMS"
diff --git a/packages/i18n/src/api/en/index.ts b/packages/i18n/src/api/en/index.ts
index 115ba4583e..2685a5a010 100644
--- a/packages/i18n/src/api/en/index.ts
+++ b/packages/i18n/src/api/en/index.ts
@@ -1,7 +1,7 @@
import type { LocaleMessages } from 'vue-i18n';
import rateLimit from './rate-limit.json';
-import validation from './validation';
+import validation from './validation.json';
const messages: LocaleMessages = {
validation,
diff --git a/packages/i18n/src/api/en/validation.json b/packages/i18n/src/api/en/validation.json
new file mode 100644
index 0000000000..fd36cb8743
--- /dev/null
+++ b/packages/i18n/src/api/en/validation.json
@@ -0,0 +1,269 @@
+{
+ "attributes": {
+ "actions": "Actions",
+ "active": "Active",
+ "allowGenUsers": "Allow generate users",
+ "app": "Application",
+ "adminLanguageId": "Admin language ID",
+ "authUrlDomainOverride": "Authentication URL domain override",
+ "authUrlTokenCharset": "Authentication URL token charset",
+ "authUrlTokenLength": "Authentication URL token length",
+ "baseImage": "Base image",
+ "birthdate": "Birth date",
+ "captcha": "CAPTCHA",
+ "countryFlagCode": "Country flag code",
+ "code": "Code",
+ "conversionFactor": "Conversion factor",
+ "copy": "Copy",
+ "cron": "CRON",
+ "csvMapping": {
+ "rowOffset": "Row offset",
+ "idColumnOffset": "ID column offset",
+ "descriptionColumnOffset": "Description column offset",
+ "localDescriptionColumnOffset": "Local description column offset"
+ },
+ "csvMappingFields": "Field column mappings",
+ "csvMappingNutrients": "Nutrient column mappings",
+ "customFields": "Custom fields",
+ "dataExport": "Data export",
+ "demographicGroups": "Demographic groups",
+ "description": "Description",
+ "disabledAt": "Disabled at",
+ "displayName": "Display name",
+ "endDate": "End date",
+ "email": "Email",
+ "emailConfirm": "Confirm email",
+ "emailNotifications": "Email notifications",
+ "englishName": "English name",
+ "estimateIn": "Estimate in",
+ "expiresAt": "Expires at",
+ "feedbackSchemeId": "Feedback scheme ID",
+ "file": "File",
+ "genericName": "Generic name",
+ "genUserKey": "JWT secret",
+ "guideImageId": "Guide image ID",
+ "heightCm": "Height",
+ "henryCoefficients": "Henry coefficients",
+ "howMany": "How many",
+ "i18n": {
+ "defaults": "Missing default translations",
+ "keys": "Not matching translation keys",
+ "messages": "Invalid translations"
+ },
+ "id": "ID",
+ "imageMapId": "Image map ID",
+ "images": "Images",
+ "job": "Job",
+ "label": "Label",
+ "languageId": "Language ID",
+ "localeId": "Locale ID",
+ "limit": "Limit",
+ "linkAsMain": "Link as main",
+ "localName": "Local name",
+ "main": {
+ "attributes": {
+ "readyMealOption": "Ready meal option",
+ "reasonableAmount": "Reasonable amount",
+ "sameAsBeforeOption": "Same as before option",
+ "useInRecipes": "Use in recipes"
+ },
+ "code": "Global code",
+ "foodGroupId": "Food group ID",
+ "isHidden": "Is hidden",
+ "name": "Global name",
+ "parentCategories": "Parent categories"
+ },
+ "maximumDailySubmissions": "Maximum daily submissions",
+ "maximumTotalSubmissions": "Maximum total submissions",
+ "meals": "Meals",
+ "method": "Method",
+ "message": "Message",
+ "minimumSubmissionInterval": "Minimum submission interval",
+ "multiFactorAuthentication": "Multi-factor authentication",
+ "name": "Name",
+ "numberOfSubmissionsForFeedback": "Number of submissions for feedback",
+ "nutrientRecords": "Nutrient records",
+ "objects": "Objects",
+ "outlineCoordinates": "Outline coordinates",
+ "outputs": "Outputs",
+ "orderBy": "Order",
+ "ownerId": "Owner ID",
+ "page": "Page",
+ "password": "Password",
+ "passwordConfirm": "Password confirmation",
+ "params": {
+ "_": "Parameters",
+ "file": "File",
+ "targetAlgorithm": "Sorting algorithm type"
+ },
+ "permissions": "Permissions",
+ "phone": "Phone",
+ "physicalActivityLevelId": "Physical activity level",
+ "physicalDataFields": "Physical data fields",
+ "prompt": "Prompt",
+ "prompts": "Prompts",
+ "prototypeLocaleId": "Prototype locale ID",
+ "respondentLanguageId": "Respondent language ID",
+ "roles": "Roles",
+ "sessionData": "Session data",
+ "search": "Search",
+ "searchCollectData": "Search collect data",
+ "searchMatchScoreWeight": "Search match score weight",
+ "searchSortingAlgorithm": "Search sorting algorithm",
+ "searchMinWordLength1": "Minimum word length for 1 spelling correction",
+ "searchMinWordLength2": "Minimum word length for 2 spelling corrections",
+ "section": "Section",
+ "selectionImage": "Selection image",
+ "sessionLifetime": "Session lifetime",
+ "sex": "Sex",
+ "slug": "Slug",
+ "smsNotifications": "SMS notifications",
+ "sort": "Sort",
+ "startDate": "Start date",
+ "state": "State",
+ "submissions": "Submissions",
+ "supportEmail": "Support email",
+ "survey": "Survey",
+ "surveySchemeId": "Survey scheme ID",
+ "surveySchemeOverrides": "Survey scheme overrides",
+ "suspensionReason": "Suspension reason",
+ "storeUserSessionOnServer": "Store user session on server",
+ "textDirection": "Text direction",
+ "text": "Text",
+ "terms": "Terms",
+ "token": "Token",
+ "topFoods": {
+ "max": "Max number of foods",
+ "colors": "Colors",
+ "nutrientTypes": "Nutrient types"
+ },
+ "translations": "Translations",
+ "type": "Type",
+ "tzOffset": "Timezone offset",
+ "useForRecipes": "Use for recipes",
+ "userId": "User ID",
+ "userPersonalIdentifiers": "User personal identifiers",
+ "userCustomFields": "User custom fields",
+ "username": "Username",
+ "value": "Value",
+ "verifiedAt": "Verified at",
+ "weight": "Weight",
+ "weightKg": "Weight",
+ "weightTarget": "Weight target"
+ },
+ "types": {
+ "array": {
+ "_": "\"{attribute}\" must be an array.",
+ "min": "\"{attribute}\" must be an array (min: {min}).",
+ "max": "\"{attribute}\" must be an array (max: {max}).",
+ "minMax": "\"{attribute}\" must be an array (min: {min}, max: {max}).",
+ "even": "\"{attribute}\" must have an even number of elements.",
+ "number": "\"{attribute}\" must be an array of numbers.",
+ "string": "\"{attribute}\" must be an array of string.",
+ "colors": "\"{attribute}\" must be an array of colors."
+ },
+ "boolean": {
+ "_": "\"{attribute}\" must be a boolean (true/false)."
+ },
+ "cron": {
+ "_": "\"{attribute}\" must be a cron entry."
+ },
+ "date": {
+ "_": "\"{attribute}\" must be a date.",
+ "after": "\"{attribute}\" must be a date after {after}.",
+ "before": "\"{attribute}\" must be a date before {before}.",
+ "between": "\"{attribute}\" must be a date between {after} and {before}.",
+ "ms": "\"{attribute}\" must be a duration format (30m, 1h, 2d)."
+ },
+ "duplicate": {
+ "_": "\"{attribute}\" can't have duplicate items."
+ },
+ "float": {
+ "_": "\"{attribute}\" must be a floating number.",
+ "min": "\"{attribute}\" must be a floating number (min: {min}).",
+ "max": "\"{attribute}\" must be a floating number (max: {max}).",
+ "minMax": "\"{attribute}\" must be a floating number (min: {min}, max: {max})."
+ },
+ "exists": {
+ "_": "\"{attribute}\" must refer to an existing database record."
+ },
+ "either": {
+ "_": "Either {one} or {two} must be filled in."
+ },
+ "email": {
+ "_": "\"{attribute}\" must be a valid email address."
+ },
+ "file": {
+ "_": "\"{attribute}\" must be a file.",
+ "ext": "\"{attribute}\" has invalid file extension, expected: {ext}",
+ "mime": "\"{attribute}\" has invalid mime type, expected: {mime}"
+ },
+ "in": {
+ "_": "\"{attribute}\" must be allowed value.",
+ "options": "\"{attribute}\" must be one of the values: {options}."
+ },
+ "int": {
+ "_": "\"{attribute}\" must be an integer.",
+ "min": "\"{attribute}\" must be an integer (min: {min}).",
+ "max": "\"{attribute}\" must be an integer (max: {max}).",
+ "minMax": "\"{attribute}\" must be an integer (min: {min}, max: {max})."
+ },
+ "json": {
+ "_": "\"{attribute}\" must be a valid JSON object."
+ },
+ "jwt": {
+ "_": "\"{attribute}\" must be a valid JWT."
+ },
+ "locale": {
+ "_": "\"{attribute}\" must be a valid locale code."
+ },
+ "number": {
+ "_": "\"{attribute}\" must be a number."
+ },
+ "match": {
+ "_": "\"{attribute}\" must match with {match} value."
+ },
+ "object": {
+ "_": "\"{attribute}\" must be an object."
+ },
+ "password": {
+ "_": "Password must contain at least 10 chars of lower/upper chars and numbers."
+ },
+ "phone": {
+ "_": "\"{attribute}\" must be a valid telephone number."
+ },
+ "regEx": {
+ "_": "\"{attribute}\" is invalid."
+ },
+ "restricted": {
+ "_": "\"{attribute}\" is restricted to allowed values."
+ },
+ "safeChars": {
+ "_": "\"{attribute}\" must be unique code (charset [a-zA-Z0-9-_])."
+ },
+ "string": {
+ "_": "\"{attribute}\" must be filled in.",
+ "max": "\"{attribute}\" must be filled in (max: {max}).",
+ "minMax": "\"{attribute}\" must be a filled in (min: {min}, max: {max}).",
+ "or": {
+ "array": "\"{attribute}\" must be a string or an array."
+ },
+ "unique": "\"{attribute}\" must be a string of unique characters."
+ },
+ "structure": {
+ "_": "\"{attribute}\" must have valid structure."
+ },
+ "terms": {
+ "_": "\"{attribute}\" must be accepted."
+ },
+ "unique": {
+ "_": "A record with the same \"{attribute}\" value already exists."
+ },
+ "url": {
+ "_": "\"{attribute}\" must be a valid URL."
+ },
+ "uuid": {
+ "_": "\"{attribute}\" must be a valid UUID."
+ }
+ }
+}
diff --git a/packages/i18n/src/api/en/validation/attributes.json b/packages/i18n/src/api/en/validation/attributes.json
deleted file mode 100644
index 625d35e05f..0000000000
--- a/packages/i18n/src/api/en/validation/attributes.json
+++ /dev/null
@@ -1,152 +0,0 @@
-{
- "actions": "Actions",
- "active": "Active",
- "allowGenUsers": "Allow generate users",
- "app": "Application",
- "adminLanguageId": "Admin language ID",
- "authUrlDomainOverride": "Authentication URL domain override",
- "authUrlTokenCharset": "Authentication URL token charset",
- "authUrlTokenLength": "Authentication URL token length",
- "baseImage": "Base image",
- "birthdate": "Birth date",
- "captcha": "CAPTCHA",
- "countryFlagCode": "Country flag code",
- "code": "Code",
- "conversionFactor": "Conversion factor",
- "copy": "Copy",
- "cron": "CRON",
- "csvMapping": {
- "rowOffset": "Row offset",
- "idColumnOffset": "ID column offset",
- "descriptionColumnOffset": "Description column offset",
- "localDescriptionColumnOffset": "Local description column offset"
- },
- "csvMappingFields": "Field column mappings",
- "csvMappingNutrients": "Nutrient column mappings",
- "customFields": "Custom fields",
- "dataExport": "Data export",
- "demographicGroups": "Demographic groups",
- "description": "Description",
- "disabledAt": "Disabled at",
- "displayName": "Display name",
- "endDate": "End date",
- "email": "Email",
- "emailConfirm": "Confirm email",
- "emailNotifications": "Email notifications",
- "englishName": "English name",
- "estimateIn": "Estimate in",
- "expiresAt": "Expires at",
- "feedbackSchemeId": "Feedback scheme ID",
- "file": "File",
- "genericName": "Generic name",
- "genUserKey": "JWT secret",
- "guideImageId": "Guide image ID",
- "heightCm": "Height",
- "henryCoefficients": "Henry coefficients",
- "howMany": "How many",
- "i18n": {
- "defaults": "Missing default translations",
- "keys": "Not matching translation keys",
- "messages": "Invalid translations"
- },
- "id": "ID",
- "imageMapId": "Image map ID",
- "images": "Images",
- "job": "Job",
- "label": "Label",
- "languageId": "Language ID",
- "localeId": "Locale ID",
- "limit": "Limit",
- "linkAsMain": "Link as main",
- "localName": "Local name",
- "main": {
- "attributes": {
- "readyMealOption": "Ready meal option",
- "reasonableAmount": "Reasonable amount",
- "sameAsBeforeOption": "Same as before option",
- "useInRecipes": "Use in recipes"
- },
- "code": "Global code",
- "foodGroupId": "Food group ID",
- "isHidden": "Is hidden",
- "name": "Global name",
- "parentCategories": "Parent categories"
- },
- "maximumDailySubmissions": "Maximum daily submissions",
- "maximumTotalSubmissions": "Maximum total submissions",
- "meals": "Meals",
- "method": "Method",
- "message": "Message",
- "minimumSubmissionInterval": "Minimum submission interval",
- "multiFactorAuthentication": "Multi-factor authentication",
- "name": "Name",
- "numberOfSubmissionsForFeedback": "Number of submissions for feedback",
- "nutrientRecords": "Nutrient records",
- "objects": "Objects",
- "outlineCoordinates": "Outline coordinates",
- "outputs": "Outputs",
- "orderBy": "Order",
- "ownerId": "Owner ID",
- "page": "Page",
- "password": "Password",
- "passwordConfirm": "Password confirmation",
- "params": {
- "_": "Parameters",
- "file": "File",
- "targetAlgorithm": "Sorting algorithm type"
- },
- "permissions": "Permissions",
- "phone": "Phone",
- "physicalActivityLevelId": "Physical activity level",
- "physicalDataFields": "Physical data fields",
- "prompt": "Prompt",
- "prompts": "Prompts",
- "prototypeLocaleId": "Prototype locale ID",
- "respondentLanguageId": "Respondent language ID",
- "roles": "Roles",
- "sessionData": "Session data",
- "search": "Search",
- "searchCollectData": "Search collect data",
- "searchMatchScoreWeight": "Search match score weight",
- "searchSortingAlgorithm": "Search sorting algorithm",
- "searchMinWordLength1": "Minimum word length for 1 spelling correction",
- "searchMinWordLength2": "Minimum word length for 2 spelling corrections",
- "section": "Section",
- "selectionImage": "Selection image",
- "sessionLifetime": "Session lifetime",
- "sex": "Sex",
- "slug": "Slug",
- "smsNotifications": "SMS notifications",
- "sort": "Sort",
- "startDate": "Start date",
- "state": "State",
- "submissions": "Submissions",
- "supportEmail": "Support email",
- "survey": "Survey",
- "surveySchemeId": "Survey scheme ID",
- "surveySchemeOverrides": "Survey scheme overrides",
- "suspensionReason": "Suspension reason",
- "storeUserSessionOnServer": "Store user session on server",
- "textDirection": "Text direction",
- "text": "Text",
- "terms": "Terms",
- "token": "Token",
- "topFoods": {
- "max": "Max number of foods",
- "colors": "Colors",
- "nutrientTypes": "Nutrient types"
- },
- "translations": "Translations",
- "type": "Type",
- "tzOffset": "Timezone offset",
- "useForRecipes": "Use for recipes",
- "userId": "User ID",
- "userPersonalIdentifiers": "User personal identifiers",
- "userCustomFields": "User custom fields",
- "username": "Username",
- "value": "Value",
- "verifiedAt": "Verified at",
- "weight": "Weight",
- "weightKg": "Weight",
- "weightTarget": "Weight target"
-}
diff --git a/packages/i18n/src/api/en/validation/types.json b/packages/i18n/src/api/en/validation/types.json
deleted file mode 100644
index 6424c5679a..0000000000
--- a/packages/i18n/src/api/en/validation/types.json
+++ /dev/null
@@ -1,115 +0,0 @@
-{
- "array": {
- "_": "\"{attribute}\" must be an array.",
- "min": "\"{attribute}\" must be an array (min: {min}).",
- "max": "\"{attribute}\" must be an array (max: {max}).",
- "minMax": "\"{attribute}\" must be an array (min: {min}, max: {max}).",
- "even": "\"{attribute}\" must have an even number of elements.",
- "number": "\"{attribute}\" must be an array of numbers.",
- "string": "\"{attribute}\" must be an array of string.",
- "colors": "\"{attribute}\" must be an array of colors."
- },
- "boolean": {
- "_": "\"{attribute}\" must be a boolean (true/false)."
- },
- "cron": {
- "_": "\"{attribute}\" must be a cron entry."
- },
- "date": {
- "_": "\"{attribute}\" must be a date.",
- "after": "\"{attribute}\" must be a date after {after}.",
- "before": "\"{attribute}\" must be a date before {before}.",
- "between": "\"{attribute}\" must be a date between {after} and {before}.",
- "ms": "\"{attribute}\" must be a duration format (30m, 1h, 2d)."
- },
- "duplicate": {
- "_": "\"{attribute}\" can't have duplicate items."
- },
- "float": {
- "_": "\"{attribute}\" must be a floating number.",
- "min": "\"{attribute}\" must be a floating number (min: {min}).",
- "max": "\"{attribute}\" must be a floating number (max: {max}).",
- "minMax": "\"{attribute}\" must be a floating number (min: {min}, max: {max})."
- },
- "exists": {
- "_": "\"{attribute}\" must refer to an existing database record."
- },
- "either": {
- "_": "Either {one} or {two} must be filled in."
- },
- "email": {
- "_": "\"{attribute}\" must be a valid email address."
- },
- "file": {
- "_": "\"{attribute}\" must be a file.",
- "ext": "\"{attribute}\" has invalid file extension, expected: {ext}",
- "mime": "\"{attribute}\" has invalid mime type, expected: {mime}"
- },
- "in": {
- "_": "\"{attribute}\" must be allowed value.",
- "options": "\"{attribute}\" must be one of the values: {options}."
- },
- "int": {
- "_": "\"{attribute}\" must be an integer.",
- "min": "\"{attribute}\" must be an integer (min: {min}).",
- "max": "\"{attribute}\" must be an integer (max: {max}).",
- "minMax": "\"{attribute}\" must be an integer (min: {min}, max: {max})."
- },
- "json": {
- "_": "\"{attribute}\" must be a valid JSON object."
- },
- "jwt": {
- "_": "\"{attribute}\" must be a valid JWT."
- },
- "locale": {
- "_": "\"{attribute}\" must be a valid locale code."
- },
- "number": {
- "_": "\"{attribute}\" must be a number."
- },
- "match": {
- "_": "\"{attribute}\" must match with {match} value."
- },
- "object": {
- "_": "\"{attribute}\" must be an object."
- },
- "password": {
- "_": "Password must contain at least 10 chars of lower/upper chars and numbers."
- },
- "phone": {
- "_": "\"{attribute}\" must be a valid telephone number."
- },
- "regEx": {
- "_": "\"{attribute}\" is invalid."
- },
- "restricted": {
- "_": "\"{attribute}\" is restricted to allowed values."
- },
- "safeChars": {
- "_": "\"{attribute}\" must be unique code (charset [a-zA-Z0-9-_])."
- },
- "string": {
- "_": "\"{attribute}\" must be filled in.",
- "max": "\"{attribute}\" must be filled in (max: {max}).",
- "minMax": "\"{attribute}\" must be a filled in (min: {min}, max: {max}).",
- "or": {
- "array": "\"{attribute}\" must be a string or an array."
- },
- "unique": "\"{attribute}\" must be a string of unique characters."
- },
- "structure": {
- "_": "\"{attribute}\" must have valid structure."
- },
- "terms": {
- "_": "\"{attribute}\" must be accepted."
- },
- "unique": {
- "_": "A record with the same \"{attribute}\" value already exists."
- },
- "url": {
- "_": "\"{attribute}\" must be a valid URL."
- },
- "uuid": {
- "_": "\"{attribute}\" must be a valid UUID."
- }
-}
diff --git a/packages/i18n/src/api/fr/attributes.json b/packages/i18n/src/api/fr/attributes.json
deleted file mode 100644
index 8c4aab2520..0000000000
--- a/packages/i18n/src/api/fr/attributes.json
+++ /dev/null
@@ -1,144 +0,0 @@
-{
- "actions": "Actions",
- "active": "Activer",
- "allowGenUsers": "Permettre la création d'utilisateurs",
- "app": "Application",
- "adminLanguageId": "Identifiant du langage admin",
- "authUrlDomainOverride": "Domaine de l'URL d'identification substitué",
- "authUrlTokenCharset": "Encodage du jeton de l'URL d'identification",
- "authUrlTokenLength": "Longueur du jeton de l'URL d'identification'",
- "baseImage": "Image de base",
- "birthdate": "Date de naissance",
- "captcha": "CAPTCHA",
- "countryFlagCode": "Code du drapeau du pays",
- "code": "Code",
- "conversionFactor": "Facteur de conversion",
- "copy": "Copier",
- "cron": "CRON",
- "csvMapping": {
- "rowOffset": "Décalage de la ligne",
- "idColumnOffset": "Décalage de l'identifiant de la colonne",
- "descriptionColumnOffset": "Description du décalage de la colonne",
- "localDescriptionColumnOffset": "Description régionale du décalage de la colonne"
- },
- "csvMappingFields": "Mappage des champs des colonnes",
- "csvMappingNutrients": "Mappage des colonnes de nutriments",
- "customFields": "Modifier les champs",
- "dataExport": "Exporter les données",
- "demographicGroups": "Groupes démographiques",
- "description": "Description",
- "displayName": "Faire apparaître le nom",
- "endDate": "Date de fin",
- "email": "Adresse mail",
- "emailConfirm": "Confirmer l'adresse mail",
- "emailNotifications": "Notifications par mail",
- "englishName": "Nom anglais",
- "estimateIn": "Estimer en",
- "feedbackSchemeId": "Identifiant de la configuration de bilan",
- "file": "Fichier",
- "genericName": "Nom générique",
- "genUserKey": "Clé JWT (secret)",
- "guideImageId": "Identifiant de l'image étalon",
- "heightCm": "Taille",
- "henryCoefficients": "Coefficients de Henry",
- "howMany": "Combien",
- "i18n": {
- "defaults": "Traductions par défaut manquantes",
- "keys": "Non correspondant aux clés de traduction",
- "messages": "Traductions invalides"
- },
- "id": "Identifiant",
- "imageMapId": "Identifiant de la photo à curseur",
- "images": "Photos",
- "imageUrl": "URL de la photo",
- "job": "Tâche",
- "label": "Légende",
- "languageId": "Identifiant de la langue",
- "localeId": "Identifiant régional",
- "limit": "Limiter",
- "linkAsMain": "Associer en tant que principal",
- "localName": "Nom régional",
- "main": {
- "attributes": {
- "readyMealOption": "Option plat préparé",
- "reasonableAmount": "Quantité raisonnable",
- "sameAsBeforeOption": "Option comme précédemment",
- "useInRecipes": "Utiliser dans des recettes"
- },
- "code": "Code global",
- "foodGroupId": "Identifiant du groupe alimentaire",
- "isHidden": "Est caché",
- "name": "Nom global",
- "parentCategories": "Catégories parent"
- },
- "maximumDailySubmissions": "Soumissions maximales journalières",
- "maximumTotalSubmissions": "Soumissions maximales totales",
- "meals": "Repas",
- "method": "Méthode",
- "message": "Message",
- "minimumSubmissionInterval": "Intervalle minimum pour la soumission",
- "multiFactorAuthentication": "Authentification à plusieurs facteurs",
- "name": "Nom",
- "numberOfSubmissionsForFeedback": "Nombre de soumissions pour le bilan alimentaire",
- "nutrientRecords": "Fichiers de nutriments",
- "objects": "Objets",
- "outlineCoordinates": "Coordonnées du contour",
- "outputs": "Sorties",
- "orderBy": "Ordonner",
- "ownerId": "Identifiant du propriétaire",
- "page": "Page",
- "password": "Mot de passe",
- "passwordConfirm": "Confirmation du mot de passe",
- "params": "Paramètres",
- "permissions": "Autorisations",
- "phone": "Téléphone",
- "physicalActivityLevelId": "Niveau d'activité physique",
- "physicalDataFields": "Champs de données physiques",
- "prompt": "Afficher",
- "prompts": "Affichages",
- "prototypeLocaleId": "Identifiant du prototype régional",
- "respondentLanguageId": "Identifiant de la langue du répondant",
- "roles": "Rôles",
- "sessionData": "Données de la session",
- "search": "Chercher",
- "searchCollectData": "Search collect data",
- "searchMatchScoreWeight": "Chercher le poids du score de correspondance",
- "searchSortingAlgorithm": "Chercher un algorithme de tri",
- "section": "Section",
- "selectionImage": "Image sélectionnée",
- "sessionLifetime": "Session lifetime",
- "sex": "Sexe",
- "slug": "Slug (identification unique de l'adresse web)",
- "smsNotifications": "Notifications SMS",
- "sort": "trier",
- "startDate": "Date de début",
- "state": "Etat",
- "submissions": "Soumissions",
- "supportEmail": "Adresse mail d'aide",
- "survey": "Enquête",
- "surveySchemeId": "Identifiant de la configuration d'enquête",
- "surveySchemeOverrides": "Substitutions de la configuration de l'enquête",
- "suspensionReason": "Raison de la suspension",
- "storeUserSessionOnServer": "Conserver la session de l'utilisateur sur le serveur",
- "textDirection": "Direction du texte",
- "text": "Texte",
- "terms": "Termes",
- "token": "Jeton",
- "topFoods": {
- "max": "Nombre d'aliments maximal",
- "colors": "Couleurs",
- "nutrientTypes": "Types de nutriments"
- },
- "translations": "Traductions",
- "type": "Type",
- "tzOffset": "Décalage de fuseau horaire",
- "useForRecipes": "Utiliser pour des recettes",
- "userId": "Identifiant de l'utilisateur",
- "userPersonalIdentifiers": "Identifiants personnels de l'utilisateur",
- "userCustomFields": "Champs personnalisables par l'utilisateur",
- "username": "Nom de l'utilisateur",
- "value": "Valeur",
- "weight": "Poids",
- "weightKg": "Poids",
- "weightTarget": "Poids cible"
-}
diff --git a/packages/i18n/src/api/en/validation/index.ts b/packages/i18n/src/api/fr/index.ts
similarity index 50%
rename from packages/i18n/src/api/en/validation/index.ts
rename to packages/i18n/src/api/fr/index.ts
index a3928747e3..2685a5a010 100644
--- a/packages/i18n/src/api/en/validation/index.ts
+++ b/packages/i18n/src/api/fr/index.ts
@@ -1,11 +1,11 @@
import type { LocaleMessages } from 'vue-i18n';
-import attributes from './attributes.json';
-import types from './types.json';
+import rateLimit from './rate-limit.json';
+import validation from './validation.json';
const messages: LocaleMessages = {
- attributes,
- types,
+ validation,
+ rateLimit,
};
export default messages;
diff --git a/packages/i18n/src/api/fr/rate-limit.json b/packages/i18n/src/api/fr/rate-limit.json
new file mode 100644
index 0000000000..15da1602ec
--- /dev/null
+++ b/packages/i18n/src/api/fr/rate-limit.json
@@ -0,0 +1,8 @@
+{
+ "generic": "Too many requests, please try again later.",
+ "login": "Too many failed login attempts, please try again later.",
+ "password": "Password reset link has been recently requested, please try again later.",
+ "verify": "Email verification link has been recently requested, please try again later.",
+ "generateUser": "New user has just been generated, please try again later.",
+ "feedback": "You have recently requested the feedback output, please try again later."
+}
diff --git a/packages/i18n/src/api/fr/types.json b/packages/i18n/src/api/fr/types.json
deleted file mode 100644
index 172e1bd40a..0000000000
--- a/packages/i18n/src/api/fr/types.json
+++ /dev/null
@@ -1,98 +0,0 @@
-{
- "array": {
- "_": "\"{attribute}\" doit être un tableau.",
- "min": "\"{attribute}\" doit être un tableau (min: {min}).",
- "max": "\"{attribute}\" doit être un tableau (max: {max}).",
- "minMax": "\"{attribute}\" doit être un tableau (min: {min}, max: {max}).",
- "number": "\"{attribute}\" doit être un tableau de nombres.",
- "string": "\"{attribute}\" doit être un tableau de chaînes de caractères.",
- "colors": "\"{attribute}\" doit être un tableau de couleurs."
- },
- "boolean": {
- "_": "\"{attribute}\" doit être un booléen (vrai/faux)."
- },
- "cron": {
- "_": "\"{attribute}\" doit être une entrée CRON."
- },
- "date": {
- "_": "\"{attribute}\" doit être une date."
- },
- "duplicate": {
- "_": "\"{attribute}\" ne peut pas contenir de doublons."
- },
- "float": {
- "_": "\"{attribute}\" doit être un nombre décimal.",
- "min": "\"{attribute}\" doit être un nombre décimal (min: {min}).",
- "max": "\"{attribute}\" doit être un nombre décimal (max: {max}).",
- "minMax": "\"{attribute}\" doit être un nombre décimal (min: {min}, max: {max})."
- },
- "exists": {
- "_": "\"{attribute}\" doit se rapporter à une base de données existante."
- },
- "either": {
- "_": "Soit {one} soit {two} doit être rempli."
- },
- "email": {
- "_": "\"{attribute}\" doit être une adresse mail valide."
- },
- "file": {
- "_": "\"{attribute}\" doit être un fichier.",
- "ext": "\"{attribute}\" ne présente pas le bon format de fichier (extension du fichier), attendu : {ext}",
- "mime": "\"{attribute}\" ne présente pas le bon format de fichier (type MIME), attendu : {mime}"
- },
- "in": {
- "_": "\"{attribute}\" doit être une valeur autorisée.",
- "options": "\"{attribute}\" doit être une des valeurs suivantes : {options}."
- },
- "int": {
- "_": "\"{attribute}\" doit être un nombre entier.",
- "min": "\"{attribute}\" doit être un nombre entier (min: {min}).",
- "max": "\"{attribute}\" doit être un nombre entier (max: {max}).",
- "minMax": "\"{attribute}\" doit être un nombre entier (min: {min}, max: {max})."
- },
- "jwt": {
- "_": "\"{attribute}\" doit être un jeton web JSON (JWT) valide."
- },
- "locale": {
- "_": "\"{attribute}\" doit être un code language valide."
- },
- "match": {
- "_": "\"{attribute}\" doit correspondre à la valeur {match}."
- },
- "object": {
- "_": "\"{attribute}\" doit être un objet."
- },
- "password": {
- "_": "Le mot de passe doit contenir au moins 10 carcactères minsucules/majuscules et des nombres."
- },
- "phone": {
- "_": "\"{attribute}\" doit être un numéro de téléphone valide."
- },
- "regEx": {
- "_": "\"{attribute}\" iest invalide."
- },
- "safeChars": {
- "_": "\"{attribute}\" doit être un code unique (série de caractères [a-zA-Z0-9-_])."
- },
- "string": {
- "_": "\"{attribute}\" doit être rempli.",
- "max": "\"{attribute}\" doit être rempli (max: {max}).",
- "minMax": "\"{attribute}\" doit être rempli (min: {min}, max: {max}).",
- "or": {
- "array": "\"{attribute}\" doit être une chaîne de caractères ou un tableau."
- },
- "unique": "\"{attribute}\" doit être une chaîne de caractères uniques."
- },
- "structure": {
- "_": "\"{attribute}\" doit avoir une structure valide."
- },
- "terms": {
- "_": "\"{attribute}\" doit être accepté."
- },
- "unique": {
- "_": "Une entrée avec la même valeur de \"{attribute}\" existe déjà."
- },
- "url": {
- "_": "\"{attribute}\" doit être une URL valide."
- }
-}
diff --git a/packages/i18n/src/api/fr/validation.json b/packages/i18n/src/api/fr/validation.json
new file mode 100644
index 0000000000..00b2ec2251
--- /dev/null
+++ b/packages/i18n/src/api/fr/validation.json
@@ -0,0 +1,269 @@
+{
+ "attributes": {
+ "actions": "Actions",
+ "active": "Active",
+ "allowGenUsers": "Allow generate users",
+ "app": "Application",
+ "adminLanguageId": "Admin language ID",
+ "authUrlDomainOverride": "Authentication URL domain override",
+ "authUrlTokenCharset": "Authentication URL token charset",
+ "authUrlTokenLength": "Authentication URL token length",
+ "baseImage": "Base image",
+ "birthdate": "Birth date",
+ "captcha": "CAPTCHA",
+ "countryFlagCode": "Country flag code",
+ "code": "Code",
+ "conversionFactor": "Conversion factor",
+ "copy": "Copy",
+ "cron": "CRON",
+ "csvMapping": {
+ "rowOffset": "Row offset",
+ "idColumnOffset": "ID column offset",
+ "descriptionColumnOffset": "Description column offset",
+ "localDescriptionColumnOffset": "Local description column offset"
+ },
+ "csvMappingFields": "Field column mappings",
+ "csvMappingNutrients": "Nutrient column mappings",
+ "customFields": "Custom fields",
+ "dataExport": "Data export",
+ "demographicGroups": "Demographic groups",
+ "description": "Description",
+ "disabledAt": "Disabled at",
+ "displayName": "Display name",
+ "endDate": "End date",
+ "email": "Email",
+ "emailConfirm": "Confirm email",
+ "emailNotifications": "Email notifications",
+ "englishName": "English name",
+ "estimateIn": "Estimate in",
+ "expiresAt": "Expires at",
+ "feedbackSchemeId": "Feedback scheme ID",
+ "file": "File",
+ "genericName": "Generic name",
+ "genUserKey": "JWT secret",
+ "guideImageId": "Guide image ID",
+ "heightCm": "Height",
+ "henryCoefficients": "Henry coefficients",
+ "howMany": "How many",
+ "i18n": {
+ "defaults": "Missing default translations",
+ "keys": "Not matching translation keys",
+ "messages": "Invalid translations"
+ },
+ "id": "ID",
+ "imageMapId": "Image map ID",
+ "images": "Images",
+ "job": "Job",
+ "label": "Label",
+ "languageId": "Language ID",
+ "localeId": "Locale ID",
+ "limit": "Limit",
+ "linkAsMain": "Link as main",
+ "localName": "Local name",
+ "main": {
+ "attributes": {
+ "readyMealOption": "Ready meal option",
+ "reasonableAmount": "Reasonable amount",
+ "sameAsBeforeOption": "Same as before option",
+ "useInRecipes": "Use in recipes"
+ },
+ "code": "Global code",
+ "foodGroupId": "Food group ID",
+ "isHidden": "Is hidden",
+ "name": "Global name",
+ "parentCategories": "Parent categories"
+ },
+ "maximumDailySubmissions": "Maximum daily submissions",
+ "maximumTotalSubmissions": "Maximum total submissions",
+ "meals": "Meals",
+ "method": "Method",
+ "message": "Message",
+ "minimumSubmissionInterval": "Minimum submission interval",
+ "multiFactorAuthentication": "Multi-factor authentication",
+ "name": "Name",
+ "numberOfSubmissionsForFeedback": "Number of submissions for feedback",
+ "nutrientRecords": "Nutrient records",
+ "objects": "Objects",
+ "outlineCoordinates": "Outline coordinates",
+ "outputs": "Outputs",
+ "orderBy": "Order",
+ "ownerId": "Owner ID",
+ "page": "Page",
+ "password": "Password",
+ "passwordConfirm": "Password confirmation",
+ "params": {
+ "_": "Parameters",
+ "file": "File",
+ "targetAlgorithm": "Sorting algorithm type"
+ },
+ "permissions": "Permissions",
+ "phone": "Phone",
+ "physicalActivityLevelId": "Physical activity level",
+ "physicalDataFields": "Physical data fields",
+ "prompt": "Prompt",
+ "prompts": "Prompts",
+ "prototypeLocaleId": "Prototype locale ID",
+ "respondentLanguageId": "Respondent language ID",
+ "roles": "Roles",
+ "sessionData": "Session data",
+ "search": "Search",
+ "searchCollectData": "Search collect data",
+ "searchMatchScoreWeight": "Search match score weight",
+ "searchSortingAlgorithm": "Search sorting algorithm",
+ "searchMinWordLength1": "Minimum word length for 1 spelling correction",
+ "searchMinWordLength2": "Minimum word length for 2 spelling corrections",
+ "section": "Section",
+ "selectionImage": "Selection image",
+ "sessionLifetime": "Session lifetime",
+ "sex": "Sex",
+ "slug": "Slug",
+ "smsNotifications": "SMS notifications",
+ "sort": "Sort",
+ "startDate": "Start date",
+ "state": "State",
+ "submissions": "Submissions",
+ "supportEmail": "Support email",
+ "survey": "Survey",
+ "surveySchemeId": "Survey scheme ID",
+ "surveySchemeOverrides": "Survey scheme overrides",
+ "suspensionReason": "Suspension reason",
+ "storeUserSessionOnServer": "Store user session on server",
+ "textDirection": "Text direction",
+ "text": "Text",
+ "terms": "Terms",
+ "token": "Token",
+ "topFoods": {
+ "max": "Max number of foods",
+ "colors": "Colors",
+ "nutrientTypes": "Nutrient types"
+ },
+ "translations": "Translations",
+ "type": "Type",
+ "tzOffset": "Timezone offset",
+ "useForRecipes": "Use for recipes",
+ "userId": "User ID",
+ "userPersonalIdentifiers": "User personal identifiers",
+ "userCustomFields": "User custom fields",
+ "username": "Username",
+ "value": "Value",
+ "verifiedAt": "Verified at",
+ "weight": "Weight",
+ "weightKg": "Weight",
+ "weightTarget": "Weight target"
+ },
+ "types": {
+ "array": {
+ "_": "\"{attribute}\" doit être un tableau.",
+ "min": "\"{attribute}\" doit être un tableau (min: {min}).",
+ "max": "\"{attribute}\" doit être un tableau (max: {max}).",
+ "minMax": "\"{attribute}\" doit être un tableau (min: {min}, max: {max}).",
+ "even": "\"{attribute}\" must have an even number of elements.",
+ "number": "\"{attribute}\" doit être un tableau de nombres.",
+ "string": "\"{attribute}\" doit être un tableau de chaînes de caractères.",
+ "colors": "\"{attribute}\" doit être un tableau de couleurs."
+ },
+ "boolean": {
+ "_": "\"{attribute}\" doit être un booléen (vrai/faux)."
+ },
+ "cron": {
+ "_": "\"{attribute}\" doit être une entrée CRON."
+ },
+ "date": {
+ "_": "\"{attribute}\" doit être une date.",
+ "after": "\"{attribute}\" must be a date after {after}.",
+ "before": "\"{attribute}\" must be a date before {before}.",
+ "between": "\"{attribute}\" must be a date between {after} and {before}.",
+ "ms": "\"{attribute}\" must be a duration format (30m, 1h, 2d)."
+ },
+ "duplicate": {
+ "_": "\"{attribute}\" ne peut pas contenir de doublons."
+ },
+ "float": {
+ "_": "\"{attribute}\" doit être un nombre décimal.",
+ "min": "\"{attribute}\" doit être un nombre décimal (min: {min}).",
+ "max": "\"{attribute}\" doit être un nombre décimal (max: {max}).",
+ "minMax": "\"{attribute}\" doit être un nombre décimal (min: {min}, max: {max})."
+ },
+ "exists": {
+ "_": "\"{attribute}\" doit se rapporter à une base de données existante."
+ },
+ "either": {
+ "_": "Soit {one} soit {two} doit être rempli."
+ },
+ "email": {
+ "_": "\"{attribute}\" doit être une adresse mail valide."
+ },
+ "file": {
+ "_": "\"{attribute}\" doit être un fichier.",
+ "ext": "\"{attribute}\" ne présente pas le bon format de fichier (extension du fichier), attendu : {ext}",
+ "mime": "\"{attribute}\" ne présente pas le bon format de fichier (type MIME), attendu : {mime}"
+ },
+ "in": {
+ "_": "\"{attribute}\" doit être une valeur autorisée.",
+ "options": "\"{attribute}\" doit être une des valeurs suivantes : {options}."
+ },
+ "int": {
+ "_": "\"{attribute}\" doit être un nombre entier.",
+ "min": "\"{attribute}\" doit être un nombre entier (min: {min}).",
+ "max": "\"{attribute}\" doit être un nombre entier (max: {max}).",
+ "minMax": "\"{attribute}\" doit être un nombre entier (min: {min}, max: {max})."
+ },
+ "json": {
+ "_": "\"{attribute}\" must be a valid JSON object."
+ },
+ "jwt": {
+ "_": "\"{attribute}\" doit être un jeton web JSON (JWT) valide."
+ },
+ "locale": {
+ "_": "\"{attribute}\" doit être un code language valide."
+ },
+ "number": {
+ "_": "\"{attribute}\" must be a number."
+ },
+ "match": {
+ "_": "\"{attribute}\" doit correspondre à la valeur {match}."
+ },
+ "object": {
+ "_": "\"{attribute}\" doit être un objet."
+ },
+ "password": {
+ "_": "Le mot de passe doit contenir au moins 10 carcactères minsucules/majuscules et des nombres."
+ },
+ "phone": {
+ "_": "\"{attribute}\" doit être un numéro de téléphone valide."
+ },
+ "regEx": {
+ "_": "\"{attribute}\" iest invalide."
+ },
+ "restricted": {
+ "_": "\"{attribute}\" is restricted to allowed values."
+ },
+ "safeChars": {
+ "_": "\"{attribute}\" doit être un code unique (série de caractères [a-zA-Z0-9-_])."
+ },
+ "string": {
+ "_": "\"{attribute}\" doit être rempli.",
+ "max": "\"{attribute}\" doit être rempli (max: {max}).",
+ "minMax": "\"{attribute}\" doit être rempli (min: {min}, max: {max}).",
+ "or": {
+ "array": "\"{attribute}\" doit être une chaîne de caractères ou un tableau."
+ },
+ "unique": "\"{attribute}\" doit être une chaîne de caractères uniques."
+ },
+ "structure": {
+ "_": "\"{attribute}\" doit avoir une structure valide."
+ },
+ "terms": {
+ "_": "\"{attribute}\" doit être accepté."
+ },
+ "unique": {
+ "_": "Une entrée avec la même valeur de \"{attribute}\" existe déjà."
+ },
+ "url": {
+ "_": "\"{attribute}\" doit être une URL valide."
+ },
+ "uuid": {
+ "_": "\"{attribute}\" must be a valid UUID."
+ }
+ }
+}
diff --git a/packages/i18n/src/api/index.ts b/packages/i18n/src/api/index.ts
index 1632e68465..ad7b2f0b79 100644
--- a/packages/i18n/src/api/index.ts
+++ b/packages/i18n/src/api/index.ts
@@ -1,7 +1,8 @@
import type { LocaleMessages } from 'vue-i18n';
import en from './en';
+import fr from './fr';
-const messages: Record Nous avons toutes les informations dont nous avons besoin au sujet de {item} à l'heure actuelle. Pour poursuivre cette enquête, sélectionnez le bouton \"Continuer\" ci-dessous et nous sélectionnerons automatiquement le prochain aliment ou repas pour lequel nous avons encore besoin de précisions. Vous pouvez aussi sélectionner un repas ou un aliment sur la gauche si vous souhaitez apporter des précisions sur un élément particulier. Construisez votre propre recette. Vous avez déjà répondu à des questions sur \"{discardedFoodName}\"! Si vous le remplacez par \"{selectedFoodName}\" maintenant, vous pourriez avoir à répondre à nouveau à ces questions. Etes-vous sûr que vous souhaitez remplacer cet aliment ? Si vous ne trouvez pas votre aliment dans la liste, essayez de reformuler votre description dans la barre de recherche ci-dessus et cliquez sur 'Chercher à nouveau'. Ou cliquez 'Parcourir tous les aliments' et explorez les catégories alimentaires. Si vous n'arrivez toujours pas à trouver votre aliment, cliquez sur 'Signaler un aliment manquant'. Try browsing the food categories listed above to find your food. If you still can't find your food select 'Report a missing food'. If you can't find your food in the list, try rephrasing your description in the search text box above. Or select 'Browse all foods' and explore the food categories. If you still can't find your food select 'Report a missing food'. Try browsing the food categories listed above to find your food. If you still can't find your food select 'Report a missing food'.
நீங்கள் தட்டச்சு செய்யும் போது அடுத்த வரிக்குச் செல்ல உங்கள் விசைப்பலகையில் Enter அல்லது \"உணவு/பானத்தைச் சேர்\" பொத்தானை அழுத்தலாம்.
உங்களிடம் எவ்வளவு இருந்தது என்பதை உள்ளிட வேண்டாம், உணவுப் பெயர்கள் மட்டுமே.", - "food": "உங்கள் உணவு மற்றும் பானங்கள்", "add": "Add", "drinksOnly": "பானங்கள்", "foods": "Foods and drinks", @@ -224,7 +224,6 @@ "text": "", "description": "" }, - "quantity": { "_": "Quantity", "whole": "முழுமையாக ", @@ -351,7 +350,8 @@ "less": "நான் குறைவாக விட்டுவிட்டேன்", "more": "நான் அதிகமாக விட்டுவிட்டேன்", "confirm": "அந்த அளவுக்கு விட்டுவிட்டேன்" - } + }, + "count": "How many of these drinks did you have at this time?" }, "guideImage": { "name": "வழிகாட்டி படம்", @@ -395,6 +395,11 @@ "search": "Search for a food", "root": "all food categories", "back": "Back to '{category}'", + "optional": { + "confirm": "Yes", + "reject": "No", + "infoPrompt": "What was it?" + }, "addMore": "Add more ingredients", "noMore": "No more ingredients", "none": "No food results. Please try refining your search.", @@ -431,6 +436,34 @@ }, "confirm": "நான் அவ்வளவு எடுத்து கொண்டேன்" }, + "pizzaV2": { + "name": "Pizza", + "text": "", + "description": "", + "sizes": { + "label": "What size pizza did you have?", + "personal": "Personal 7\"", + "small": "Small 9.5\"", + "medium": "Medium 11.5\"", + "large": "Large 13.5\"", + "xxl": "Extra large 15.5\"" + }, + "crusts": { + "label": "What type of pizza crust did you have?", + "classic": "Classic", + "italian-thin": "Italian / Thin", + "stuffed": "Stuffed" + }, + "units": { + "label": "How do you want to estimate your portion?", + "slice": "In slices", + "whole": "In whole pizzas" + }, + "quantity": { + "slice": "How many slices did you have?", + "whole": "How many whole pizzas did you have?" + } + }, "standardPortion": { "name": "நிலையான பகுதி", "text": "", diff --git a/packages/i18n/src/shared/zh/feedback.json b/packages/i18n/src/shared/zh/feedback.json index 4fe91cda77..dc6de936be 100644 --- a/packages/i18n/src/shared/zh/feedback.json +++ b/packages/i18n/src/shared/zh/feedback.json @@ -8,13 +8,11 @@ }, "title": "您的召回反馈", "missingFoods": "任何报告为丢失的食物将不包含在您的饮食反馈中", - "physicalData": { "title": "关于您", "subtitle": "我们只需要您的几个详细信息", "change": "更改我的信息", "recall": "记录另一天", - "sexes": { "_": "性别", "m": "男性", @@ -37,7 +35,6 @@ "gain_weight": "增加体重" } }, - "outputs": { "title": "输出", "download": { @@ -56,17 +53,21 @@ "retry": "最近已请求反馈输出,请在 {secs} 秒后重试。", "print": "打印" }, - "topFoods": { "title": "对您的营养摄入量做出最大贡献的食物", "chart": "{nutrient} 最高" }, - "meals": { "title": "Meals per-day breakdown", "chart": "{nutrient}" }, - + "rating": { + "_": "Rate your experience", + "title": "How would you rate the dietary feedback?", + "comment": "Tell us more about the rating you gave the dietary feedback", + "send": "Send feedback", + "sent": "Feedback sent, thank you!" + }, "intake": { "your": "您的 {nutrient} 摄入量为 {amount}", "estimated": "估计摄入量", @@ -74,7 +75,6 @@ "tellMeMore": "让我知道多一点", "gotIt": "明白了!" }, - "unitDescription": { "percentage_of_energy": "反馈基于该营养素对您的能量摄入的贡献以及与建议的比较。", "energy_divided_by_bmr": "反馈是基于您的能量摄入量除以BMR以及与推荐值的比较。", diff --git a/packages/i18n/src/shared/zh/prompts.json b/packages/i18n/src/shared/zh/prompts.json index eb927b0c7f..1632441746 100644 --- a/packages/i18n/src/shared/zh/prompts.json +++ b/packages/i18n/src/shared/zh/prompts.json @@ -70,13 +70,13 @@ "text": "", "description": "" }, - "associatedFoods": { "name": "相关食物", "text": "", "description": "", "yes": "是的,我有", "yesAnother": "Yes, I had another", + "existingFoodHint": "Choose \"Yes, I had some\" if you have already entered it.", "no": "不是的,我没有吃", "moreFoodsQuestion": "Did you have any other foods from this category?", "databaseLookupTitle": "What was it?", @@ -95,7 +95,8 @@ "label": "I can't find my food", "description": "
Try browsing the food categories listed above to find your food.
If you still can't find your food select 'Report a missing food'.
", "report": "Report a missing food", - "tryAgain": "OK, let me try again" + "tryAgain": "OK, let me try again", + "placeholder": "Missing food" } }, "editMeal": { @@ -223,7 +224,6 @@ "text": "", "description": "" }, - "quantity": { "_": "Quantity", "whole": "整个", @@ -350,7 +350,8 @@ "less": "我留下了少量", "more": "我留下了大量", "confirm": "就是那么多" - } + }, + "count": "How many of these drinks did you have at this time?" }, "guideImage": { "name": "指南图片", @@ -394,6 +395,11 @@ "search": "Search for a food", "root": "all food categories", "back": "Back to '{category}'", + "optional": { + "confirm": "Yes", + "reject": "No", + "infoPrompt": "What was it?" + }, "addMore": "Add more ingredients", "noMore": "No more ingredients", "none": "No food results. Please try refining your search.", @@ -430,6 +436,34 @@ }, "confirm": "我吃了那么多" }, + "pizzaV2": { + "name": "Pizza", + "text": "", + "description": "", + "sizes": { + "label": "What size pizza did you have?", + "personal": "Personal 7\"", + "small": "Small 9.5\"", + "medium": "Medium 11.5\"", + "large": "Large 13.5\"", + "xxl": "Extra large 15.5\"" + }, + "crusts": { + "label": "What type of pizza crust did you have?", + "classic": "Classic", + "italian-thin": "Italian / Thin", + "stuffed": "Stuffed" + }, + "units": { + "label": "How do you want to estimate your portion?", + "slice": "In slices", + "whole": "In whole pizzas" + }, + "quantity": { + "slice": "How many slices did you have?", + "whole": "How many whole pizzas did you have?" + } + }, "standardPortion": { "name": "标准份量", "text": "", diff --git a/packages/i18n/src/survey/fr/common.json b/packages/i18n/src/survey/fr/common.json index 136e182402..2cf260340d 100644 --- a/packages/i18n/src/survey/fr/common.json +++ b/packages/i18n/src/survey/fr/common.json @@ -18,9 +18,8 @@ "_": "Se connecter", "start": "Commençons", "subtitle": "Se connecter avec votre nom d'utilisateur et votre mot de passe", - "back": "Retour à la connexion", "captcha": "Remplir le test CAPTCHA", - + "back": "Retour à la connexion", "err": { "captcha": "Réponse invalide au test CAPTCHA.", "credentials": "Le nom d'utilisateur et le mot de passe renseignés sont invalides.", @@ -32,7 +31,6 @@ "_": "Se déconnecter", "text": "Se déconnecter de l'application" }, - "username": "Nom d'utilisateur", "name": "Nom", "email": "Adresse mail", @@ -41,30 +39,25 @@ "phone": "Téléphone", "message": "Message", "continue": "Continuer", - "help": { "_": "Aide", "title": "Demander de l'aide", "text": "Veuillez compléter le formulaire ci-dessous et une de nos équipes d'appui vous contactera dès que possible.", "sent": "Votre demande d'aide a été envoyée." }, - "app": { "_": "Application", "info": "Informations de l'application", "build": "Construire" }, - "clipboard": { "_": "Copier dans le presse-papiers", "copied": "Données copiées dans le presse-papiers" }, - "sw": { "check": "Une mise à jour du contenu est disponible.", "update": "Mettre à jour" }, - "action": { "cancel": "Annuler", "close": "Fermer", @@ -83,12 +76,10 @@ "yes": "Oui", "no": "Non" }, - "not": { "provided": "Non renseigné", "selected": "Non sélectionné" }, - "errors": { "expansionIncomplete": "Veuillez compléter toutes les sections avec un point d'exclamation." } diff --git a/packages/i18n/src/survey/fr/profile.json b/packages/i18n/src/survey/fr/profile.json index 774a66cf33..f0297450bd 100644 --- a/packages/i18n/src/survey/fr/profile.json +++ b/packages/i18n/src/survey/fr/profile.json @@ -2,14 +2,11 @@ "_": "Profil", "info": "Informations", "settings": "Paramètres", - "provider": "Fournisseur", "providerId": "Identité du fournisseur", - "languages": { "_": "Langue", "title": "Langues", - "ar": "Arabe", "de": "Allemand", "dk": "Danois", diff --git a/packages/i18n/src/survey/fr/recall.json b/packages/i18n/src/survey/fr/recall.json index e0ac913637..fbf4314430 100644 --- a/packages/i18n/src/survey/fr/recall.json +++ b/packages/i18n/src/survey/fr/recall.json @@ -11,10 +11,10 @@ }, "rating": { "_": "Évaluez votre expérience", + "title": "Comment évalueriez-vous le rappel ?", "comment": "Dites-nous en plus sur la note que vous avez attribuée au rappel", "send": "Envoyer des commentaires", - "sent": "Commentaires envoyés, merci !", - "title": "Comment évalueriez-vous le rappel ?" + "sent": "Commentaires envoyés, merci !" }, "survey": "Enquête: {name}", "submissions": { diff --git a/packages/i18n/src/survey/fr/survey.json b/packages/i18n/src/survey/fr/survey.json index 36c004ab4c..0d3c8f37dd 100644 --- a/packages/i18n/src/survey/fr/survey.json +++ b/packages/i18n/src/survey/fr/survey.json @@ -20,15 +20,15 @@ } }, "generateUser": { + "400": "Le captcha est invalide.", + "403": "L'étude {surveyId} ne permet pas de générer de nouveaux identifiants.", + "404": "L'étude {surveyId} n'a pas été reconnue.", + "429": "De nouveaux identifiants viennent d'être générés, rééssayez plus tard.", "_": "Accéder à l'étude", "subtitle": "Ceci est une étude en libre accès, vous pouvez y accéder gratuitement.", "link": "lien", "info1": "Sélectionnez 'Accéder à l'étude' pour générer de nouveaux identifiants. Il vous faudra retenir ces identifiants si vous souhaitez reprendre votre session plus tard.", "info2": "Ce rappel va durer approximativement vingt minutes.", - "info3": "Si vous fermez la fenêtre de votre navigateur, vous pouvez revenir en utilisant ce {action}.", - "400": "Le captcha est invalide.", - "403": "L'étude {surveyId} ne permet pas de générer de nouveaux identifiants.", - "404": "L'étude {surveyId} n'a pas été reconnue.", - "429": "De nouveaux identifiants viennent d'être générés, rééssayez plus tard." + "info3": "Si vous fermez la fenêtre de votre navigateur, vous pouvez revenir en utilisant ce {action}." } } diff --git a/packages/i18n/src/survey/ms/common.json b/packages/i18n/src/survey/ms/common.json index 8cacdc8aa7..bc7f997908 100644 --- a/packages/i18n/src/survey/ms/common.json +++ b/packages/i18n/src/survey/ms/common.json @@ -20,7 +20,6 @@ "subtitle": "Daftar masuk dengan nama pengguna & kata laluan anda", "captcha": "Complete the captcha challenge", "back": "Kembali ke log masuk", - "err": { "captcha": "Invalid captcha challenge response.", "credentials": "Nama pengguna & kata laluan yang diberikan adalah tidak sah.", @@ -32,7 +31,6 @@ "_": "Log keluar", "text": "Log keluar daripada aplikasi" }, - "username": "Nama pengguna", "name": "Nama", "email": "Emel", @@ -41,30 +39,25 @@ "phone": "Telefon", "message": "Message", "continue": "Teruskan", - "help": { "_": "Bantuan", "title": "Mohon bantuan", "text": "Please complete the form below and one of our support staff will get in touch as soon as they can.", "sent": "Permohonan bantuan anda telah dihantar." }, - "app": { "_": "Aplikasi", "info": "Maklumat aplikasi", "build": "Bina" }, - "clipboard": { "_": "Salin ke clipboard", "copied": "Data disalin ke clipboard" }, - "sw": { "check": "Kandungan yang dikemas kini telah tersedia", "update": "Kemas kini" }, - "action": { "cancel": "Batal", "close": "Tutup", @@ -83,12 +76,10 @@ "yes": "Ya", "no": "Tidak" }, - "not": { "provided": "Tidak disediakan", "selected": "Tidak dipilih" }, - "errors": { "expansionIncomplete": "Lengkapkan semua bahagian yang ditanda dengan !" } diff --git a/packages/i18n/src/survey/ms/profile.json b/packages/i18n/src/survey/ms/profile.json index a0e75ef84d..a2565e8fa5 100644 --- a/packages/i18n/src/survey/ms/profile.json +++ b/packages/i18n/src/survey/ms/profile.json @@ -2,14 +2,11 @@ "_": "Profil", "info": "Maklumat", "settings": "Tetapan", - "provider": "Penyedia", "providerId": "ID Penyedia", - "languages": { "_": "Bahasa", "title": "Bahasa", - "ar": "Bahasa arab", "de": "Bahasa Jerman", "dk": "Bahasa Denmark", diff --git a/packages/i18n/src/survey/ms/recall.json b/packages/i18n/src/survey/ms/recall.json index 107e4d2427..5c0b733dd2 100644 --- a/packages/i18n/src/survey/ms/recall.json +++ b/packages/i18n/src/survey/ms/recall.json @@ -9,6 +9,13 @@ "daily": "Anda telah mencapai had harian ingatan semula.", "total": "Anda telah mencapai jumlah had ingatan semula." }, + "rating": { + "_": "Rate your experience", + "title": "How would you rate the recall?", + "comment": "Tell us more about the rating you gave the recall", + "send": "Send feedback", + "sent": "Feedback sent, thank you!" + }, "survey": "Study: {name}", "submissions": { "_": "Hari ingatan semula", @@ -83,6 +90,7 @@ "feedback": "Pergi ke maklum balas", "next": "Teruskan", "submit": "Hantar ingatan semula", + "reviewed": "Reviewed", "addMeal": "Tambah hidangan", "deleteFood": "Padam makanan", "deleteMeal": "Padam hidangan", diff --git a/packages/i18n/src/survey/ms/survey.json b/packages/i18n/src/survey/ms/survey.json index da94b85de8..1c0c607f18 100644 --- a/packages/i18n/src/survey/ms/survey.json +++ b/packages/i18n/src/survey/ms/survey.json @@ -20,15 +20,15 @@ } }, "generateUser": { + "400": "Imej keselamatan captcha yang diberikan tidak sah.", + "403": "Survei {surveyId} tidak membenarkan penjanaan pengguna.", + "404": "Survei {surveyId} tidak dapat dikesan.", + "429": "Pengguna Baharu baru sahaja dijana, sila cuba semula sebentar lagi.", "_": "Jana akses", "subtitle": "Ini adalah kajian open access, anda boleh mengakses secara percuma.", "link": "link", "info1": "Select 'Generate access' to generate new credentials. Note down these credentials if you would like to resume later.", "info2": "This survey will take approximately 15 minutes.", - "info3": "If you close your browser window you can come back using this {action}.", - "400": "Imej keselamatan captcha yang diberikan tidak sah.", - "403": "Survei {surveyId} tidak membenarkan penjanaan pengguna.", - "404": "Survei {surveyId} tidak dapat dikesan.", - "429": "Pengguna Baharu baru sahaja dijana, sila cuba semula sebentar lagi." + "info3": "If you close your browser window you can come back using this {action}." } } diff --git a/packages/i18n/src/survey/ta/common.json b/packages/i18n/src/survey/ta/common.json index 9c7d7a6a78..34422bf02e 100644 --- a/packages/i18n/src/survey/ta/common.json +++ b/packages/i18n/src/survey/ta/common.json @@ -20,7 +20,6 @@ "subtitle": "உங்கள் பயனர்பெயர் மற்றும் கடவுச்சொல்லுடன் உள்நுழையவும்", "captcha": "Complete the captcha challenge", "back": "உள்நுழைவுக்குத் திரும்பு", - "err": { "captcha": "Invalid captcha challenge response.", "credentials": "தவறான பயனர்பெயர் மற்றும் கடவுச்சொல் சான்றுகள் வழங்கப்பட்டுள்ளன.", @@ -32,7 +31,6 @@ "_": "வெளியேறு", "text": "பயன்பாட்டில் இருந்து வெளியேறவும்" }, - "username": "பயனர் பெயர்", "name": "பெயர்", "email": "மின்னஞ்சல்", @@ -41,30 +39,25 @@ "phone": "தொலைபேசி", "message": "Message", "continue": "தொடரவும்", - "help": { "_": "உதவி", "title": "உதவி கேட்கவும்", "text": "Please complete the form below and one of our support staff will get in touch as soon as they can.", "sent": "உங்கள் உதவிக் கோரிக்கை அனுப்பப்பட்டது." }, - "app": { "_": "செயலி", "info": "செயலி தகவல்", "build": "உருவாக்கு" }, - "clipboard": { "_": "கிளிப்போர்டுக்கு நகலெடுக்கவும்", "copied": "கிளிப்போர்டுக்கு தரவு நகலெடுக்கப்பட்டது" }, - "sw": { "check": "உள்ளடக்க புதுப்பிப்பு இருக்கிறது.", "update": "புதுப்பிக்கவும்" }, - "action": { "cancel": "ரத்து செய்", "close": "மூடு", @@ -83,12 +76,10 @@ "yes": "ஆம்", "no": "இல்லை" }, - "not": { "provided": "வழங்கப்படவில்லை", "selected": "தேர்ந்தெடுக்கப்படவில்லை" }, - "errors": { "expansionIncomplete": "குறிக்கப்பட்ட அனைத்து பிரிவுகளையும் முடிக்கவும் !" } diff --git a/packages/i18n/src/survey/ta/profile.json b/packages/i18n/src/survey/ta/profile.json index e2ab53be7e..e2de754e4a 100644 --- a/packages/i18n/src/survey/ta/profile.json +++ b/packages/i18n/src/survey/ta/profile.json @@ -2,14 +2,11 @@ "_": "சுயவிவரம்", "info": "தகவல்", "settings": "அமைப்புகள்", - "provider": "சேவையாளர்", "providerId": "சேவையாளர்கள் ஐடி", - "languages": { "_": "மொழி", "title": "மொழிகள்", - "ar": "அரபு", "de": "ஜெர்மன்", "dk": "டேனிஷ்", diff --git a/packages/i18n/src/survey/ta/recall.json b/packages/i18n/src/survey/ta/recall.json index 5f72b4227e..0ddde33270 100644 --- a/packages/i18n/src/survey/ta/recall.json +++ b/packages/i18n/src/survey/ta/recall.json @@ -9,6 +9,13 @@ "daily": "தினசரி நினைவு வரம்பை அடைந்துவிட்டீர்கள்.", "total": "திரும்ப அழைக்கும் மொத்த வரம்பை அடைந்துவிட்டீர்கள்." }, + "rating": { + "_": "Rate your experience", + "title": "How would you rate the recall?", + "comment": "Tell us more about the rating you gave the recall", + "send": "Send feedback", + "sent": "Feedback sent, thank you!" + }, "survey": "Study: {name}", "submissions": { "_": "நினைவூட்டல் நாள்", @@ -83,6 +90,7 @@ "feedback": "பின்னூட்டத்திற்கு செல்", "next": "தொடரவும்", "submit": "நினைவூட்டலை சமர்ப்பிக்கவும்", + "reviewed": "Reviewed", "addMeal": "சாப்பாடு சேர்க்கவும்", "deleteFood": "உணவை நீக்கவும்", "deleteMeal": "சாப்பாட்டை நீக்கவும்", diff --git a/packages/i18n/src/survey/ta/survey.json b/packages/i18n/src/survey/ta/survey.json index e443863b3b..8aca68f4f4 100644 --- a/packages/i18n/src/survey/ta/survey.json +++ b/packages/i18n/src/survey/ta/survey.json @@ -20,15 +20,15 @@ } }, "generateUser": { + "400": "Invalid captcha provided.", + "403": "Survey {surveyId} doesn't allow user generation.", + "404": "Survey {surveyId} hasn't been recognized.", + "429": "New user has just been generated, try again later.", "_": "Generate access", "subtitle": "This is open access study, you can get free access.", "link": "link", "info1": "Select 'Generate access' to generate new credentials. Note down these credentials if you would like to resume later.", "info2": "This survey will take approximately 15 minutes.", - "info3": "If you close your browser window you can come back using this {action}.", - "400": "Invalid captcha provided.", - "403": "Survey {surveyId} doesn't allow user generation.", - "404": "Survey {surveyId} hasn't been recognized.", - "429": "New user has just been generated, try again later." + "info3": "If you close your browser window you can come back using this {action}." } } diff --git a/packages/i18n/src/survey/zh/common.json b/packages/i18n/src/survey/zh/common.json index 27f08adc55..9512cee393 100644 --- a/packages/i18n/src/survey/zh/common.json +++ b/packages/i18n/src/survey/zh/common.json @@ -20,7 +20,6 @@ "subtitle": "使用您的用户名和密码登录", "captcha": "Complete the captcha challenge", "back": "返回登录", - "err": { "captcha": "Invalid captcha challenge response.", "credentials": "提供的用户名和密码凭据无效。", @@ -32,7 +31,6 @@ "_": "登出", "text": "登出应用程序" }, - "username": "用户名", "name": "名字", "email": "电子邮件", @@ -41,30 +39,25 @@ "phone": "电话", "message": "Message", "continue": "继续", - "help": { "_": "帮助", "title": "请求帮助", "text": "Please complete the form below and one of our support staff will get in touch as soon as they can.", "sent": "您的帮助请求已发送。" }, - "app": { "_": "应用程序", "info": "应用程序信息", "build": "构建" }, - "clipboard": { "_": "复制到剪贴板", "copied": "数据已复制到剪贴板" }, - "sw": { "check": "内容更新可用", "update": "更新" }, - "action": { "cancel": "取消", "close": "关闭", @@ -83,12 +76,10 @@ "yes": "是", "no": "否" }, - "not": { "provided": "未提供", "selected": "未选择" }, - "errors": { "expansionIncomplete": "完成标有 ! 部分" } diff --git a/packages/i18n/src/survey/zh/profile.json b/packages/i18n/src/survey/zh/profile.json index eb60630aa4..d5a5ce14c8 100644 --- a/packages/i18n/src/survey/zh/profile.json +++ b/packages/i18n/src/survey/zh/profile.json @@ -2,14 +2,11 @@ "_": "简介", "info": "信息", "settings": "设置", - "provider": "供应商", "providerId": "供应商ID", - "languages": { "_": "语言", "title": "语言", - "ar": "阿拉伯语", "de": "德语", "dk": "丹麦语", diff --git a/packages/i18n/src/survey/zh/recall.json b/packages/i18n/src/survey/zh/recall.json index 87b80e063e..f73f720043 100644 --- a/packages/i18n/src/survey/zh/recall.json +++ b/packages/i18n/src/survey/zh/recall.json @@ -9,6 +9,13 @@ "daily": "您已达到每日召回限制。", "total": "您已达到总召回限制。" }, + "rating": { + "_": "Rate your experience", + "title": "How would you rate the recall?", + "comment": "Tell us more about the rating you gave the recall", + "send": "Send feedback", + "sent": "Feedback sent, thank you!" + }, "survey": "Study: {name}", "submissions": { "_": "召回日期", @@ -83,6 +90,7 @@ "feedback": "前往反馈", "next": "继续", "submit": "提交召回", + "reviewed": "Reviewed", "addMeal": "添加餐点", "deleteFood": "删除食物", "deleteMeal": "删除餐点", diff --git a/packages/i18n/src/survey/zh/survey.json b/packages/i18n/src/survey/zh/survey.json index 3faf318ce6..954014e21e 100644 --- a/packages/i18n/src/survey/zh/survey.json +++ b/packages/i18n/src/survey/zh/survey.json @@ -1,5 +1,9 @@ { "_": "调查", + "welcome": { + "_": "Welcome to Intake24", + "subtitle": "Intake24 is used in research studies to collect information about what people eat and drink." + }, "info": "调查信息", "states": { "_": "状态", @@ -16,15 +20,15 @@ } }, "generateUser": { + "400": "提供的验证码无效。", + "403": "调查 {surveyId} 不允许生成用户。", + "404": "调查 {surveyId} 尚未被识别。", + "429": "刚刚生成新用户,请稍后重试。", "_": "生成访问权限", "subtitle": "这是开放获取研究,您可以免费访问。", "link": "link", "info1": "Select 'Generate access' to generate new credentials. Note down these credentials if you would like to resume later.", "info2": "This survey will take approximately 15 minutes.", - "info3": "If you close your browser window you can come back using this {action}.", - "400": "提供的验证码无效。", - "403": "调查 {surveyId} 不允许生成用户。", - "404": "调查 {surveyId} 尚未被识别。", - "429": "刚刚生成新用户,请稍后重试。" + "info3": "If you close your browser window you can come back using this {action}." } }