diff --git a/apps/demo-app-video/src/i18n.ts b/apps/demo-app-video/src/i18n.ts index be8ddfaeb..f68aeeba8 100644 --- a/apps/demo-app-video/src/i18n.ts +++ b/apps/demo-app-video/src/i18n.ts @@ -6,6 +6,7 @@ import en from './translations/en.json'; import fr from './translations/fr.json'; import de from './translations/de.json'; import nl from './translations/nl.json'; +import it from './translations/it.json'; i18n .use(I18nextBrowserLanguageDetector) @@ -21,6 +22,7 @@ i18n fr: { translation: fr }, de: { translation: de }, nl: { translation: nl }, + it: { translation: it }, }, }) .catch(console.error); diff --git a/apps/demo-app-video/src/translations/it.json b/apps/demo-app-video/src/translations/it.json new file mode 100644 index 000000000..ec4eae444 --- /dev/null +++ b/apps/demo-app-video/src/translations/it.json @@ -0,0 +1,5 @@ +{ + "inspection-complete": { + "thank-message": "Grazie per aver dedicato del tempo a completare l'ispezione." + } +} diff --git a/apps/demo-app/src/i18n.ts b/apps/demo-app/src/i18n.ts index be8ddfaeb..f68aeeba8 100644 --- a/apps/demo-app/src/i18n.ts +++ b/apps/demo-app/src/i18n.ts @@ -6,6 +6,7 @@ import en from './translations/en.json'; import fr from './translations/fr.json'; import de from './translations/de.json'; import nl from './translations/nl.json'; +import it from './translations/it.json'; i18n .use(I18nextBrowserLanguageDetector) @@ -21,6 +22,7 @@ i18n fr: { translation: fr }, de: { translation: de }, nl: { translation: nl }, + it: { translation: it }, }, }) .catch(console.error); diff --git a/apps/demo-app/src/translations/it.json b/apps/demo-app/src/translations/it.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/apps/demo-app/src/translations/it.json @@ -0,0 +1 @@ +{} diff --git a/packages/camera-web/src/i18n.ts b/packages/camera-web/src/i18n.ts index 009766b4a..5fb260b53 100644 --- a/packages/camera-web/src/i18n.ts +++ b/packages/camera-web/src/i18n.ts @@ -3,6 +3,7 @@ import en from './translations/en.json'; import fr from './translations/fr.json'; import de from './translations/de.json'; import nl from './translations/nl.json'; +import it from './translations/it.json'; /** * i18n instance of the Camera package. You can use this instance to automatically sync your application current @@ -14,5 +15,6 @@ export const i18nCamera = i18nCreateSDKInstance({ fr: { translation: fr }, de: { translation: de }, nl: { translation: nl }, + it: { translation: it }, }, }); diff --git a/packages/camera-web/src/translations/it.json b/packages/camera-web/src/translations/it.json new file mode 100644 index 000000000..a0b02ef39 --- /dev/null +++ b/packages/camera-web/src/translations/it.json @@ -0,0 +1,3 @@ +{ + "retry": "Riprova" +} diff --git a/packages/camera-web/src/utils/errors.utils.ts b/packages/camera-web/src/utils/errors.utils.ts index 3295a2b78..791891d6b 100644 --- a/packages/camera-web/src/utils/errors.utils.ts +++ b/packages/camera-web/src/utils/errors.utils.ts @@ -13,6 +13,7 @@ export function getCameraErrorLabel(error?: UserMediaErrorType): TranslationObje fr: "L'apperçu de la caméra n'est pas disponible car l'accès à la caméra n'est pas autorisé.", de: 'Die Kameravorschau ist nicht verfügbar, da für die Seite kein Kamerazugriff gewährt wurde.', nl: 'De cameravoorbeeld is niet beschikbaar omdat er geen toegang tot de camera is verleend aan de pagina.', + it: "L'anteprima della fotocamera non è disponibile perché l'accesso alla fotocamera non è stato concesso alla pagina.", }; case UserMediaErrorType.WEBPAGE_NOT_ALLOWED: return { @@ -20,6 +21,7 @@ export function getCameraErrorLabel(error?: UserMediaErrorType): TranslationObje fr: "Impossible d'accéder à la caméra. Veuillez vous assurer d'appuyer sur “Autoriser” lorsqu'on vous propose d'autoriser l'accès à la caméra pour cette page web.", de: 'Die Kamera kann nicht zugelassen werden. Stellen Sie sicher, dass Sie auf „Zulassen“ drücken, wenn Sie aufgefordert werden, die Kamera für diese Webseite zuzulassen.', nl: 'Kan geen toestemming krijgen voor de camera. Zorg ervoor dat u op “Toestaan” drukt wanneer u wordt gevraagd om toestemming te geven voor het gebruik van de camera op deze webpagina.', + it: 'Impossibile ottenere l\'accesso alla fotocamera. Assicurati di premere "Consenti" quando ti viene chiesto di concedere il permesso di utilizzare la fotocamera per questa pagina web.', }; case UserMediaErrorType.BROWSER_NOT_ALLOWED: return { @@ -27,6 +29,7 @@ export function getCameraErrorLabel(error?: UserMediaErrorType): TranslationObje fr: "Impossible d'accéder à la caméra. Veuillez vous assurer d'autoriser l'accès à la caméra pour ce navigateur internet dans les paramètres de votre téléphone.", de: 'Der Zugriff auf die Kamera ist nicht möglich. Stellen Sie sicher, dass Sie in den Einstellungen Ihres Geräts den Kamerazugriff für Ihren aktuellen Internetbrowser zulassen.', nl: 'Kan geen cameratoegang krijgen. Zorg ervoor dat u de camera toegang verleent tot uw huidige internet browser in de instellingen van uw apparaat.', + it: "Impossibile ottenere l'accesso alla fotocamera. Assicurati di concedere l'accesso alla fotocamera al tuo browser internet corrente nelle impostazioni del tuo dispositivo.", }; case UserMediaErrorType.STREAM_INACTIVE: return { @@ -34,6 +37,7 @@ export function getCameraErrorLabel(error?: UserMediaErrorType): TranslationObje fr: 'Le flux vidéo de la caméra a été coupé de manière inattendue.', de: 'Der Video-Stream der Kamera wurde unerwartet geschlossen.', nl: 'De videostream van de camera is onverwacht gesloten.', + it: 'Il flusso video della fotocamera è stato chiuso inaspettatamente.', }; case UserMediaErrorType.INVALID_STREAM: return { @@ -41,6 +45,7 @@ export function getCameraErrorLabel(error?: UserMediaErrorType): TranslationObje fr: 'Impossible de traiter le flux vidéo de la caméra.', de: 'Der Videostrom der Kamera kann nicht verarbeitet werden.', nl: 'De videostream van de camera kan niet worden verwerkt.', + it: 'Impossibile elaborare il flusso video della fotocamera.', }; default: return { @@ -48,6 +53,7 @@ export function getCameraErrorLabel(error?: UserMediaErrorType): TranslationObje fr: 'Une erreur inattendue est survenue lors de la récupération du flux vidéo de la caméra.', de: 'Beim Abrufen des Kamera-Videostreams ist ein unerwarteter Fehler aufgetreten.', nl: 'Er is een onverwachte fout opgetreden bij het ophalen van de videostream van de camera.', + it: 'Si è verificato un errore imprevisto durante il recupero del flusso video della fotocamera.', }; } } diff --git a/packages/camera-web/test/utils/errors.utils.test.ts b/packages/camera-web/test/utils/errors.utils.test.ts index 7d07a474c..d46bb52c4 100644 --- a/packages/camera-web/test/utils/errors.utils.test.ts +++ b/packages/camera-web/test/utils/errors.utils.test.ts @@ -9,6 +9,7 @@ describe('Camera error utils', () => { fr: expect.any(String), de: expect.any(String), nl: expect.any(String), + it: expect.any(String), }); }); }); @@ -19,6 +20,7 @@ describe('Camera error utils', () => { fr: expect.any(String), de: expect.any(String), nl: expect.any(String), + it: expect.any(String), }); }); @@ -28,6 +30,7 @@ describe('Camera error utils', () => { fr: expect.any(String), de: expect.any(String), nl: expect.any(String), + it: expect.any(String), }); }); }); diff --git a/packages/common-ui-web/src/components/CaptureSelection/i18n.ts b/packages/common-ui-web/src/components/CaptureSelection/i18n.ts index b7c0890e4..291b60457 100644 --- a/packages/common-ui-web/src/components/CaptureSelection/i18n.ts +++ b/packages/common-ui-web/src/components/CaptureSelection/i18n.ts @@ -3,6 +3,7 @@ import en from './translations/en.json'; import fr from './translations/fr.json'; import de from './translations/de.json'; import nl from './translations/nl.json'; +import it from './translations/it.json'; /** * i18n instance of the CaptureSelection component. You can use this instance to automatically sync your application @@ -14,6 +15,7 @@ const i18nCreateInspection = i18nCreateSDKInstance({ fr: { translation: fr }, de: { translation: de }, nl: { translation: nl }, + it: { translation: it }, }, }); diff --git a/packages/common-ui-web/src/components/CaptureSelection/translations/it.json b/packages/common-ui-web/src/components/CaptureSelection/translations/it.json new file mode 100644 index 000000000..5e2b7a136 --- /dev/null +++ b/packages/common-ui-web/src/components/CaptureSelection/translations/it.json @@ -0,0 +1,12 @@ +{ + "addDamage": { + "title": "Segnala un danno", + "description": "Aggiungi foto di ammaccature, graffi o altri danni presenti sul veicolo.", + "button": "Aggiungi foto dei danni" + }, + "capture": { + "title": "Avvia l’ispezione", + "description": "Nessuna ammaccatura o graffio? Fai il giro del veicolo e scatta delle foto.", + "button": "Scatta foto" + } +} diff --git a/packages/common-ui-web/src/components/CreateInspection/i18n.ts b/packages/common-ui-web/src/components/CreateInspection/i18n.ts index 1b88609c0..f5e3acb72 100644 --- a/packages/common-ui-web/src/components/CreateInspection/i18n.ts +++ b/packages/common-ui-web/src/components/CreateInspection/i18n.ts @@ -3,6 +3,7 @@ import en from './translations/en.json'; import fr from './translations/fr.json'; import de from './translations/de.json'; import nl from './translations/nl.json'; +import it from './translations/it.json'; /** * i18n instance of the CreateInspection component. You can use this instance to automatically sync your application @@ -14,6 +15,7 @@ const i18nCreateInspection = i18nCreateSDKInstance({ fr: { translation: fr }, de: { translation: de }, nl: { translation: nl }, + it: { translation: it }, }, }); diff --git a/packages/common-ui-web/src/components/CreateInspection/translations/it.json b/packages/common-ui-web/src/components/CreateInspection/translations/it.json new file mode 100644 index 000000000..c90408272 --- /dev/null +++ b/packages/common-ui-web/src/components/CreateInspection/translations/it.json @@ -0,0 +1,7 @@ +{ + "errors": { + "retry": "Riprova", + "create-inspection": "Si è verificato un errore imprevisto durante la creazione dell'ispezione.", + "missing-inspection-id": "L'URL a cui stai tentando di accedere non è valido." + } +} diff --git a/packages/common-ui-web/src/components/ImageDetailedView/i18n.ts b/packages/common-ui-web/src/components/ImageDetailedView/i18n.ts index 1945b62fd..6a73f3eee 100644 --- a/packages/common-ui-web/src/components/ImageDetailedView/i18n.ts +++ b/packages/common-ui-web/src/components/ImageDetailedView/i18n.ts @@ -3,6 +3,7 @@ import en from './translations/en.json'; import fr from './translations/fr.json'; import de from './translations/de.json'; import nl from './translations/nl.json'; +import it from './translations/it.json'; /** * i18n instance of the Inspection CApture Web package. You can use this instance to automatically sync your application @@ -14,6 +15,7 @@ const i18nImageDetailedView = i18nCreateSDKInstance({ fr: { translation: fr }, de: { translation: de }, nl: { translation: nl }, + it: { translation: it }, }, }); diff --git a/packages/common-ui-web/src/components/ImageDetailedView/translations/it.json b/packages/common-ui-web/src/components/ImageDetailedView/translations/it.json new file mode 100644 index 000000000..490ceb7e3 --- /dev/null +++ b/packages/common-ui-web/src/components/ImageDetailedView/translations/it.json @@ -0,0 +1,3 @@ +{ + "retake": "Ripeti" +} diff --git a/packages/common-ui-web/src/components/InspectionGallery/i18n.ts b/packages/common-ui-web/src/components/InspectionGallery/i18n.ts index 1c5381794..add56a573 100644 --- a/packages/common-ui-web/src/components/InspectionGallery/i18n.ts +++ b/packages/common-ui-web/src/components/InspectionGallery/i18n.ts @@ -3,6 +3,7 @@ import en from './translations/en.json'; import fr from './translations/fr.json'; import de from './translations/de.json'; import nl from './translations/nl.json'; +import it from './translations/it.json'; const i18nInspectionGallery = i18nCreateSDKInstance({ resources: { @@ -10,6 +11,7 @@ const i18nInspectionGallery = i18nCreateSDKInstance({ fr: { translation: fr }, de: { translation: de }, nl: { translation: nl }, + it: { translation: it }, }, }); diff --git a/packages/common-ui-web/src/components/InspectionGallery/translations/it.json b/packages/common-ui-web/src/components/InspectionGallery/translations/it.json new file mode 100644 index 000000000..8d5db9b92 --- /dev/null +++ b/packages/common-ui-web/src/components/InspectionGallery/translations/it.json @@ -0,0 +1,19 @@ +{ + "card": { + "addDamage": "Aggiungi un danno" + }, + "topBar": { + "submit": "Conferma", + "title": "Foto", + "retakeFilter": "Riprese", + "approvedFilter": "Scattate e approvate", + "completed": "Questa ispezione è terminata" + }, + "list": { + "empty": { + "capture": "Nessuna foto. Le foto scattate appariranno qui.", + "nonCapture": "Non ci sono foto in questa ispezione.", + "filter": "Nessun risultato per il filtro selezionato." + } + } +} diff --git a/packages/common-ui-web/src/components/Login/i18n.ts b/packages/common-ui-web/src/components/Login/i18n.ts index 2fe17982a..582184646 100644 --- a/packages/common-ui-web/src/components/Login/i18n.ts +++ b/packages/common-ui-web/src/components/Login/i18n.ts @@ -3,6 +3,7 @@ import en from './translations/en.json'; import fr from './translations/fr.json'; import de from './translations/de.json'; import nl from './translations/nl.json'; +import it from './translations/it.json'; /** * i18n instance of the Login component. You can use this instance to automatically sync your application current @@ -14,6 +15,7 @@ const i18nLogin = i18nCreateSDKInstance({ fr: { translation: fr }, de: { translation: de }, nl: { translation: nl }, + it: { translation: it }, }, }); diff --git a/packages/common-ui-web/src/components/Login/translations/it.json b/packages/common-ui-web/src/components/Login/translations/it.json new file mode 100644 index 000000000..504f8847f --- /dev/null +++ b/packages/common-ui-web/src/components/Login/translations/it.json @@ -0,0 +1,10 @@ +{ + "actions": { "log-in": "Accedi", "log-out": "Disconnetti" }, + "errors": { + "popup-closed": "Ops! Non siamo riusciti a collegarti perché il pop-up è stato chiuso. Proviamo di nuovo!", + "token-expired": "Il tuo token di autenticazione è scaduto. Effettua nuovamente l'accesso.", + "insufficient-authorization": "Non hai le autorizzazioni necessarie per utilizzare questa applicazione. Disconnettiti e usa un altro account.", + "unknown": "Ops! Si è verificato un errore imprevisto durante la connessione. Proviamo di nuovo!", + "missing-token": "L'URL a cui stai tentando di accedere non è valido." + } +} diff --git a/packages/common-ui-web/src/components/VehicleTypeSelection/i18n.ts b/packages/common-ui-web/src/components/VehicleTypeSelection/i18n.ts index 4be9dba64..d6c8d5504 100644 --- a/packages/common-ui-web/src/components/VehicleTypeSelection/i18n.ts +++ b/packages/common-ui-web/src/components/VehicleTypeSelection/i18n.ts @@ -3,6 +3,7 @@ import en from './translations/en.json'; import fr from './translations/fr.json'; import de from './translations/de.json'; import nl from './translations/nl.json'; +import it from './translations/it.json'; const i18nVehicleTypeSelection = i18nCreateSDKInstance({ resources: { @@ -10,6 +11,7 @@ const i18nVehicleTypeSelection = i18nCreateSDKInstance({ fr: { translation: fr }, de: { translation: de }, nl: { translation: nl }, + it: { translation: it }, }, }); diff --git a/packages/common-ui-web/src/components/VehicleTypeSelection/translations/it.json b/packages/common-ui-web/src/components/VehicleTypeSelection/translations/it.json new file mode 100644 index 000000000..e2bd7a099 --- /dev/null +++ b/packages/common-ui-web/src/components/VehicleTypeSelection/translations/it.json @@ -0,0 +1,6 @@ +{ + "header": { + "title": "Seleziona il tipo di veicolo", + "confirm": "Conferma" + } +} diff --git a/packages/common-ui-web/test/components/ImageDetailedView/ImageDetailedViewOverlay/ImageDetailedViewOverlay.test.tsx b/packages/common-ui-web/test/components/ImageDetailedView/ImageDetailedViewOverlay/ImageDetailedViewOverlay.test.tsx index c90dfb659..053cfd99c 100644 --- a/packages/common-ui-web/test/components/ImageDetailedView/ImageDetailedViewOverlay/ImageDetailedViewOverlay.test.tsx +++ b/packages/common-ui-web/test/components/ImageDetailedView/ImageDetailedViewOverlay/ImageDetailedViewOverlay.test.tsx @@ -86,7 +86,7 @@ describe('ImageDetailedViewOverlay component', () => { it('should display the image label with the proper icon', () => { const props = createProps(); - props.image.label = { en: 'test', fr: 'fr', de: 'test-de', nl: 'test-nl' }; + props.image.label = { en: 'test', fr: 'fr', de: 'test-de', nl: 'test-nl', it: 'test-it' }; const icon = 'hello-test-icon'; const primaryColor = 'test-primary-test'; (useImageLabelIcon as jest.Mock).mockImplementationOnce(() => ({ icon, primaryColor })); diff --git a/packages/common/README/INTERNATIONALIZATION.md b/packages/common/README/INTERNATIONALIZATION.md index 81c8f7d7c..149e2bdea 100644 --- a/packages/common/README/INTERNATIONALIZATION.md +++ b/packages/common/README/INTERNATIONALIZATION.md @@ -1,4 +1,5 @@ # Internationalization + This README page is aimed at providing documentation on a specific part of the `@monkvision/common` package : the internationalization. You can refer to [this page](README.md) for more general information on the package. @@ -6,6 +7,7 @@ This package exports utility functions and hooks tools that help you manage the SDK, as well as common translations that can be useful when interacting with the SDK. # react-i18next + The internationalization in the Monk SDK (and in Monk Webapps) is handled using [i18n](https://www.i18next.com/) and [react-i18next](https://react.i18next.com/). This means that installing some of our packages (like `@monkvision/inspection-report-web` for instance) will mean automatically adding these packages as dependencies in your @@ -24,8 +26,11 @@ specify to it which language you want it to use. The following languages are sup - Dutch # i18n Utilities + ## i18nWrap wrapper + ### Description + This wrapped is used by internal monk SDK to wrap the component with I18nextProvider. ### Example of usage @@ -43,6 +48,7 @@ import en from './translations/en.json'; import fr from './translations/fr.json'; import de from './translations/de.json'; import nl from './translations/nl.json'; +import it from './translations/it.json'; const i18nMyComponent = i18nCreateSDKInstance({ resources: { @@ -50,12 +56,15 @@ const i18nMyComponent = i18nCreateSDKInstance({ fr: { translation: fr }, de: { translation: de }, nl: { translation: nl }, + it: { translation: it }, } }) ``` ## useI18nSync hook + ### Description + This hook is used mostly by MonkJs packages internally to synchronize their own i18n instance with the language param or prop that they are provided. @@ -76,17 +85,21 @@ function MyComponent(props: MyComponentProps) { ``` ## getLanguage + ```ts import i18n from 'i18next'; import { getLanguage } from '@monkvision/common'; console.log(getLanguage(i18n.language)); ``` + This function retrieves the language prefix from a given language string. If the prefix is not found in the list of supported languages (monkLanguages in Types package), it returns 'en' as default. # Common Translations + ## Car Parts + You can import the car parts translations like this : ```typescript @@ -97,6 +110,7 @@ The `cartPartLabels` object maps each `VehiclePart` name (enum from `@monkvision containing a label for each supported language. ## Image Status Labels + You can import the image status labels translations like this : ```typescript @@ -106,8 +120,8 @@ import { imageStatusLabels } from '@monkvision/common'; The `imageStatusLabels` object maps each `ImageStatus` (enum from `@monkvision/types`) to an object containing a `title` and a `description` property, both of which are TranslationObject`s containing a label for each supported language. - ## Compliance Issue Labels + You can import the compliance issue labels translations like this : ```typescript diff --git a/packages/common/src/i18n/translations/damageTypes.ts b/packages/common/src/i18n/translations/damageTypes.ts index f9f2eda41..a1f1755f6 100644 --- a/packages/common/src/i18n/translations/damageTypes.ts +++ b/packages/common/src/i18n/translations/damageTypes.ts @@ -9,107 +9,125 @@ export const damageTypeLabels: Record = { fr: 'Rayure', de: 'Kratzer', nl: 'Kras', + it: 'Graffio', }, [DamageType.DENT]: { en: 'Dent', fr: 'Bosse', de: 'Beule', nl: 'Deuk', + it: 'Dente', }, [DamageType.BROKEN_GLASS]: { en: 'Broken Glass', fr: 'Bris de glace', de: 'Zerbrochenes Glas', nl: 'Gebroken glas', + it: 'Vetro rotto', }, [DamageType.BROKEN_LIGHT]: { en: 'Broken Light', fr: 'Feu cassé', de: 'Kaputtem Licht', nl: 'Gebroken licht', + it: 'Luce rotta', }, [DamageType.HUBCAP_SCRATCH]: { en: 'Hubcap Scratch', fr: 'Enjoliveur rayé', de: 'Zerkratzte Radkappe', nl: 'Gebroken wieldop', + it: 'Cerchione graffiato', }, [DamageType.MISSING_HUBCAP]: { en: 'Missing Hubcap', fr: 'Enjoliveur manquant', de: 'Fehlende Radkappe', nl: 'Ontbrekende wieldop', + it: 'Cerchione mancante', }, [DamageType.SMASH]: { en: 'Smash', fr: 'Collision', de: 'Zusammenstoß', nl: 'Botsing', + it: 'Collisione', }, [DamageType.BODY_CRACK]: { en: 'Body Crack', fr: 'Fissure dans la carrosserie', de: 'Karosserieriss', nl: 'Carrosseriescheur', + it: 'Fessura della carrozzeria', }, [DamageType.MISSING_PIECE]: { en: 'Missing Piece', fr: 'Pièce manquante', de: 'Fehlendes Teil', nl: 'Ontbrekend onderdeel', + it: 'Pezzo mancante', }, [DamageType.RUSTINESS]: { en: 'Rustiness', fr: 'Rouille', de: 'Rostigkeit', nl: 'Roest', + it: 'Ruggine', }, [DamageType.DIRT]: { en: 'Dirt', fr: 'Saleté', de: 'Dreck', nl: 'Vuil', + it: 'Sporco', }, [DamageType.MISSHAPE]: { en: 'Misshape', fr: 'Forme irrégulière', de: 'Fehlform', nl: 'Misvorm', + it: 'Deformazione', }, [DamageType.PAINT_PEELING]: { en: 'Paint Peeling', fr: 'Peinture écaillée', de: 'Abblätternde Farbe', nl: 'Afbladderende verf', + it: 'Vernice che si sfalda', }, [DamageType.SCATTERED_SCRATCHES]: { en: 'Scattered Scratches', fr: 'Rayures éparses', de: 'Verstreute Kratzer', nl: 'Verspreide krassen', + it: 'Grazze sparse', }, [DamageType.LIGHT_REFLECTION]: { en: 'Light Reflection', fr: 'Réflexion de la lumière', de: 'Lichtreflexion', nl: 'Licht Reflectie', + it: 'Riflesso di luce', }, [DamageType.SHADOW]: { en: 'Shadow', fr: 'Ombre', de: 'Schatten', nl: 'Schaduw', + it: 'Ombra', }, [DamageType.CAR_CURVE]: { en: 'Car Curve', fr: 'Courbe de la voiture', de: 'Auto-Kurve', nl: 'Auto kromming', + it: "Curva dell'auto", }, [DamageType.PAINT_DAMAGE]: { en: 'Paint Damage', fr: 'Dégât sur la peinture', de: 'Lackschäden', nl: 'Beschadigde verf', + it: 'Danno alla vernice', }, }; diff --git a/packages/common/src/i18n/translations/image.ts b/packages/common/src/i18n/translations/image.ts index e370375dd..94cab7693 100644 --- a/packages/common/src/i18n/translations/image.ts +++ b/packages/common/src/i18n/translations/image.ts @@ -24,12 +24,14 @@ export const imageStatusLabels: Record = { fr: 'Upload en cours', de: 'Hochladen', nl: 'Bezig met uploaden', + it: 'Caricamento in corso', }, description: { en: 'This image is being uploaded.', fr: "Upload de l'image en cours.", de: 'Dieses Bild wird gerade hochgeladen.', nl: 'Deze afbeelding wordt geüpload.', + it: 'Questa immagine è in fase di caricamento.', }, }, [ImageStatus.COMPLIANCE_RUNNING]: { @@ -38,12 +40,14 @@ export const imageStatusLabels: Record = { fr: 'Analyse', de: 'Analysieren Sie', nl: 'Analyseren', + it: 'Analizzando', }, description: { en: 'This image is being analyzed.', fr: "Cette image est en train d'être analysée.", de: 'Dieses Bild wird gerade analysiert.', - nl: 'Deze afbeelding wordt geanalyseerd.', // Dutch translation for 'This image is being analyzed.' + nl: 'Deze afbeelding wordt geanalyseerd.', + it: 'Questa immagine è in fase di analisi.', }, }, [ImageStatus.SUCCESS]: { @@ -52,12 +56,14 @@ export const imageStatusLabels: Record = { fr: 'Succès', de: 'Erfolg', nl: 'Succes', + it: 'Successo', }, description: { en: 'This image seems good, but you can still retake it if you want.', fr: 'Cette image paraît bonne, mais vous pouvez quand-même la reprendre si besoin.', de: 'Dieses Bild scheint gut zu sein, aber Sie können es noch einmal aufnehmen, wenn Sie wollen.', nl: 'Dit beeld lijkt goed, maar je kunt het nog steeds opnieuw maken als je wilt.', + it: 'Questa immagine sembra buona, ma puoi comunque rifarla se vuoi.', }, }, [ImageStatus.UPLOAD_FAILED]: { @@ -66,12 +72,14 @@ export const imageStatusLabels: Record = { fr: 'Upload impossible', de: 'Upload fehlgeschlagen', nl: 'Upload mislukt', + it: 'Caricamento non riuscito', }, description: { en: 'Make sure you have a good connection and take the photo again.', fr: 'Vérifiez que vous avez une bonne connexion et reprenez la photo.', de: 'Vergewissern Sie sich, dass Sie eine gute Verbindung haben, und machen Sie das Foto erneut.', nl: 'Zorg ervoor dat je een goede verbinding hebt en neem de foto opnieuw.', + it: 'Assicurati di avere una buona connessione e scatta di nuovo la foto.', }, }, [ImageStatus.UPLOAD_ERROR]: { @@ -80,12 +88,14 @@ export const imageStatusLabels: Record = { fr: "Erreur d'upload", de: 'Upload-Fehler', nl: 'Fout bij uploaden', + it: 'Errore di caricamento', }, description: { en: 'An error occurred during the image upload.', fr: "Une erreur s'est produite lors de l'upload de l'image.", de: 'Beim Hochladen des Bildes ist ein Fehler aufgetreten.', nl: 'Er is een fout opgetreden tijdens het uploaden van de afbeelding.', + it: "Si è verificato un errore durante il caricamento dell'immagine.", }, }, [ImageStatus.NOT_COMPLIANT]: { @@ -94,12 +104,14 @@ export const imageStatusLabels: Record = { fr: 'Erreur', de: 'Fehler', nl: 'Fout', + it: 'Errore', }, description: { en: 'Make sure the image quality is good and take the photo again.', fr: "Vérifiez que la qualité de l'image est bonne et reprenez la photo.", de: 'Vergewissern Sie sich, dass die Bildqualität gut ist, und machen Sie das Foto erneut.', nl: 'Zorg ervoor dat de kwaliteit van de afbeelding goed is en neem de foto opnieuw.', + it: "Assicurati che la qualità dell'immagine sia buona e scatta di nuovo la foto.", }, }, }; @@ -114,12 +126,14 @@ export const complianceIssueLabels: Record = { fr: 'Non valide', de: 'Nicht konform', nl: 'Niet-conform', + it: 'Non conforme', }, description: { en: 'Make sure that the image quality is good and that the vehicle is properly aligned with the guides.', fr: "Assurez-vous que la qualité de l'image est bonne et que le véhicule est bien aligné avec les guides.", de: 'Vergewissern Sie sich, dass die Bildqualität gut ist und dass das Fahrzeug richtig an den Führungslinien ausgerichtet ist.', nl: 'Zorg ervoor dat de kwaliteit van de afbeelding goed is en dat het voertuig correct is uitgelijnd met de gidsen.', + it: "Assicurati che la qualità dell'immagine sia buona e che il veicolo sia correttamente allineato con le guide.", }, }, [ComplianceIssue.LOW_RESOLUTION]: { @@ -128,12 +142,14 @@ export const complianceIssueLabels: Record = { fr: 'Basse résolution', de: 'Niedrige Auflösung', nl: 'Lage resolutie', + it: 'Bassa risoluzione', }, description: { en: 'Make sure that the image has a good resolution.', fr: "Assurez-vous que l'image ait une résolution suffisante.", de: 'Achten Sie darauf, dass das Bild eine gute Auflösung hat.', nl: 'Zorg ervoor dat de afbeelding een goede resolutie heeft.', + it: "Assicurati che l'immagine abbia una buona risoluzione.", }, }, [ComplianceIssue.BLURRINESS]: { @@ -142,12 +158,14 @@ export const complianceIssueLabels: Record = { fr: 'Trop floue', de: 'Zu unscharf', nl: 'Te vaag', + it: 'Troppo sfocata', }, description: { en: 'Make sure that the image is not blurry.', fr: "Assurez-vous que l'image ne soit pas trop floue.", de: 'Achten Sie darauf, dass das Bild nicht unscharf ist.', nl: 'Zorg ervoor dat de afbeelding niet vaag is.', + it: "Assicurati che l'immagine non sia sfocata.", }, }, [ComplianceIssue.UNDEREXPOSURE]: { @@ -156,12 +174,14 @@ export const complianceIssueLabels: Record = { fr: 'Sousexposition', de: 'Unterbelichtet', nl: 'Onderbelicht', + it: 'Sottoesposto', }, description: { en: "Make sure that the image isn't too dark.", fr: "Assurez-vous que l'image ne soit pas trop sombre.", de: 'Achten Sie darauf, dass das Bild nicht zu dunkel ist.', nl: 'Zorg ervoor dat de afbeelding niet te donker is.', + it: "Assicurati che l'immagine non sia troppo scura.", }, }, [ComplianceIssue.OVEREXPOSURE]: { @@ -170,12 +190,14 @@ export const complianceIssueLabels: Record = { fr: 'Surexposition', de: 'Überbelichtet', nl: 'Overbelicht', + it: 'Sovraesposto', }, description: { en: "Make sure that the image isn't too bright.", fr: "Assurez-vous que l'image ne soit pas trop lumineuse.", de: 'Achten Sie darauf, dass das Bild nicht zu hell ist.', nl: 'Zorg ervoor dat de afbeelding niet te licht is.', + it: "Assicurati che l'immagine non sia troppo luminosa.", }, }, [ComplianceIssue.LENS_FLARE]: { @@ -184,12 +206,14 @@ export const complianceIssueLabels: Record = { fr: 'Reflets', de: 'Objektivreflexe', nl: 'Lensflares', + it: 'Riflessi', }, description: { en: "Make sure that there aren't any bright flare on the image.", fr: "Assurez-vous que l'image ne contienne pas de reflets.", de: 'Vergewissern Sie sich, dass keine hellen Streulichter auf dem Bild zu sehen sind.', nl: 'Zorg ervoor dat er geen heldere flares op de afbeelding staan.', + it: "Assicurati che non ci siano riflessi luminosi sull'immagine.", }, }, [ComplianceIssue.DIRTINESS]: { @@ -198,12 +222,14 @@ export const complianceIssueLabels: Record = { fr: 'Véhicule sale', de: 'Fahrzeug verschmutzt', nl: 'Vervuilde auto', + it: 'Veicolo sporco', }, description: { en: 'Make sure that your vehicle is clean.', fr: 'Assurez-vous que le véhicule soit propre.', de: 'Stellen Sie sicher, dass Ihr Fahrzeug sauber ist.', nl: 'Zorg ervoor dat uw voertuig schoon is.', + it: 'Assicurati che il tuo veicolo sia pulito.', }, }, [ComplianceIssue.SNOWNESS]: { @@ -212,12 +238,14 @@ export const complianceIssueLabels: Record = { fr: 'Véhicule enneigé', de: 'Fahrzeug verschneit', nl: 'Besneeuwde auto', + it: 'Veicolo innevato', }, description: { en: "Make sure that there aren't any snow on the vehicle.", fr: "Assurez-vous qu'il n'y ait pas de neige sur le véhicule.", de: 'Vergewissern Sie sich, dass sich kein Schnee auf dem Fahrzeug befindet.', nl: 'Zorg ervoor dat er geen sneeuw op het voertuig zit.', + it: 'Assicurati che non ci sia neve sul veicolo.', }, }, [ComplianceIssue.WETNESS]: { @@ -226,12 +254,14 @@ export const complianceIssueLabels: Record = { fr: 'Véhicule mouillé', de: 'Fahrzeug nass', nl: 'Natte auto', + it: 'Veicolo bagnato', }, description: { en: 'Make sure that the vehicle is dry.', fr: "Assurez-vous qu'il n'y ait pas d'eau sur le véhicule.", de: 'Stellen Sie sicher, dass das Fahrzeug trocken ist.', nl: 'Zorg ervoor dat het voertuig droog is.', + it: 'Assicurati che il veicolo sia asciutto.', }, }, [ComplianceIssue.REFLECTIONS]: { @@ -240,12 +270,14 @@ export const complianceIssueLabels: Record = { fr: 'Reflets', de: 'Reflexionen', nl: 'Reflecties', + it: 'Riflessi', }, description: { en: "Make sure that there are'nt any reflections on the vehicle.", fr: "Assurez-vous qu'il n'y ait pas de reflets sur le véhicule.", de: 'Vergewissern Sie sich, dass es keine Reflexionen auf dem Fahrzeug gibt.', nl: 'Zorg ervoor dat er geen reflecties op het voertuig zijn.', + it: 'Assicurati che non ci siano riflessi sul veicolo.', }, }, [ComplianceIssue.UNKNOWN_SIGHT]: { @@ -254,12 +286,14 @@ export const complianceIssueLabels: Record = { fr: 'Unknown sight', de: 'Unknown sight', nl: 'Unknown sight', + it: 'Unknown sight', }, description: { en: 'Internal Error : Unknown sight.', fr: 'Erreur interne : Unknown sight.', de: 'Interner Fehler : Unknown sight.', nl: 'Interne fout: Unknown sight.', + it: 'Errore interno: Unknown sight.', }, }, [ComplianceIssue.UNKNOWN_VIEWPOINT]: { @@ -268,12 +302,14 @@ export const complianceIssueLabels: Record = { fr: 'Unknown viewpoint', de: 'Unknown viewpoint', nl: 'Unknown viewpoint', + it: 'Unknown viewpoint', }, description: { en: 'Internal Error : Unknown viewpoint.', fr: 'Erreur interne : Unknown viewpoint.', de: 'Interner Fehler : Unknown viewpoint.', nl: 'Interne fout: Unknown viewpoint.', + it: 'Errore interno: Unknown viewpoint.', }, }, [ComplianceIssue.NO_VEHICLE]: { @@ -282,12 +318,14 @@ export const complianceIssueLabels: Record = { fr: 'Pas de véhicule', de: 'Kein Fahrzeug', nl: 'Geen voertuig', + it: 'Nessun veicolo', }, description: { en: 'Make sure that there is a vehicle in the photo.', fr: "Assurez-vous qu'il y ait un véhicule sur l'image", de: 'Vergewissern Sie sich, dass ein Fahrzeug auf dem Foto zu sehen ist.', nl: 'Zorg ervoor dat er een voertuig op de foto staat.', + it: 'Assicurati che ci sia un veicolo nella foto.', }, }, [ComplianceIssue.WRONG_ANGLE]: { @@ -296,12 +334,14 @@ export const complianceIssueLabels: Record = { fr: 'Mauvaise angle', de: 'Falscher Winkel', nl: 'Verkeerde hoek', + it: 'Angolo sbagliato', }, description: { en: 'Make sure to properly align the vehicle with the guides.', fr: 'Assurez-vous de bien aligner le véhicule avec les guides.', de: 'Achten Sie darauf, dass das Fahrzeug richtig an den Führungen ausgerichtet ist.', nl: 'Zorg ervoor dat het voertuig goed is uitgelijnd met de gidsen.', + it: 'Assicurati di allineare correttamente il veicolo con le guide.', }, }, [ComplianceIssue.WRONG_CENTER_PART]: { @@ -310,12 +350,14 @@ export const complianceIssueLabels: Record = { fr: 'Mauvais centrage', de: 'Falsches Mittelteil', nl: 'Verkeerd middenstuk', + it: 'Parte centrale sbagliata', }, description: { en: 'Make sure to properly align the vehicle with the guides.', fr: 'Assurez-vous de bien aligner le véhicule avec les guides.', de: 'Achten Sie darauf, dass das Fahrzeug richtig an den Führungen ausgerichtet ist.', nl: 'Zorg ervoor dat het voertuig goed is uitgelijnd met de gidsen.', + it: 'Assicurati di allineare correttamente il veicolo con le guide.', }, }, [ComplianceIssue.MISSING_PARTS]: { @@ -324,12 +366,14 @@ export const complianceIssueLabels: Record = { fr: 'Parties manquantes', de: 'Fehlende Teile', nl: 'Ontbrekende onderdelen', + it: 'Parti mancanti', }, description: { en: 'Make sure to properly align the vehicle with the guides.', fr: 'Assurez-vous de bien aligner le véhicule avec les guides.', de: 'Achten Sie darauf, dass das Fahrzeug richtig an den Führungen ausgerichtet ist.', nl: 'Zorg ervoor dat het voertuig goed is uitgelijnd met de gidsen.', + it: 'Assicurati di allineare correttamente il veicolo con le guide.', }, }, [ComplianceIssue.HIDDEN_PARTS]: { @@ -338,12 +382,14 @@ export const complianceIssueLabels: Record = { fr: 'Parties masquées', de: 'Versteckte Teile', nl: 'Verborgen onderdelen', + it: 'Parti nascoste', }, description: { en: 'Make sure that nothing is obstructing the vehicule from the camera.', fr: 'Assurez-vous que rien ne masque le véhicule.', de: 'Vergewissern Sie sich, dass das Fahrzeug nicht von der Kamera verdeckt wird.', nl: 'Zorg ervoor dat er niets tussen het voertuig en de camera zit.', + it: 'Assicurati che nulla ostruisca il veicolo dalla fotocamera.', }, }, [ComplianceIssue.TOO_ZOOMED]: { @@ -352,12 +398,14 @@ export const complianceIssueLabels: Record = { fr: 'Trop près', de: 'Zu nah', nl: 'Te dichtbij', + it: 'Troppo vicino', }, description: { en: 'Make sure to stand far enough from the vehicle.', fr: 'Assurez-vous de vous tenir assez loin du véhicule.', de: 'Achten Sie darauf, dass Sie weit genug vom Fahrzeug entfernt stehen.', nl: 'Zorg ervoor dat je voldoende afstand houdt van het voertuig.', + it: 'Assicurati di stare abbastanza lontano dal veicolo.', }, }, [ComplianceIssue.NOT_ZOOMED_ENOUGH]: { @@ -366,12 +414,14 @@ export const complianceIssueLabels: Record = { fr: 'Trop loin', de: 'Zu weit', nl: 'Te ver weg', + it: 'Troppo lontano', }, description: { en: 'Make sure to stand close enough from the vehicle.', fr: 'Assurez-vous de vous tenir assez proche du véhicule.', de: 'Achten Sie darauf, dass Sie nahe genug am Fahrzeug stehen.', nl: 'Zorg ervoor dat je dicht genoeg bij het voertuig staat.', + it: 'Assicurati di stare abbastanza vicino al veicolo.', }, }, [ComplianceIssue.INTERIOR_NOT_SUPPORTED]: { @@ -380,12 +430,14 @@ export const complianceIssueLabels: Record = { fr: 'Interior not supported', de: 'Interior not supported', nl: 'Interior not supported', + it: 'Interior not supported', }, description: { en: 'Internal Error : Interior not supported.', fr: 'Erreur interne : Interior not supported.', de: 'Interner Fehler : Interior not supported.', nl: 'Interne fout: Interior not supported.', + it: 'Errore interno: Interior not supported.', }, }, [ComplianceIssue.MISSING]: { @@ -394,12 +446,14 @@ export const complianceIssueLabels: Record = { fr: 'Missing', de: 'Missing', nl: 'Missing', + it: 'Missing', }, description: { en: 'Internal Error : Missing.', fr: 'Erreur interne : Missing.', de: 'Interner Fehler : Missing.', nl: 'Interne fout: Missing.', + it: 'Errore interno: Missing.', }, }, [ComplianceIssue.LOW_QUALITY]: { @@ -408,12 +462,14 @@ export const complianceIssueLabels: Record = { fr: 'Basse qualité', de: 'Geringe Qualität', nl: 'Lage kwaliteit', + it: 'Bassa qualità', }, description: { en: 'Make sure that the photo has a good quality.', fr: 'Assurez-vous de labonne qualité de la photo.', de: 'Achten Sie darauf, dass das Foto eine gute Qualität hat.', nl: 'Zorg ervoor dat de foto van goede kwaliteit is.', + it: 'Assicurati che la foto sia di buona qualità.', }, }, [ComplianceIssue.PORTRAIT_IMAGE]: { @@ -422,12 +478,14 @@ export const complianceIssueLabels: Record = { fr: 'Image en mode portrait', de: 'Hochformatbild', nl: 'Portretfoto', + it: 'Immagine verticale', }, description: { en: 'The picture is in portrait mode, please take it in landscape', fr: 'L’image est en mode portrait, veuillez la prendre en mode paysage', de: 'Das Bild ist im Hochformat, bitte fotografieren Sie im Querformat', nl: 'De foto is in portretstand, neem deze alstublieft in landschapmodus', + it: "L'immagine è in modalità verticale, scattala in orizzontale", }, }, }; diff --git a/packages/common/src/i18n/translations/vehicleParts.ts b/packages/common/src/i18n/translations/vehicleParts.ts index e5d4a4ad5..4064b9781 100644 --- a/packages/common/src/i18n/translations/vehicleParts.ts +++ b/packages/common/src/i18n/translations/vehicleParts.ts @@ -9,497 +9,580 @@ export const vehiclePartLabels: Record = { fr: 'IGNORE', de: 'IGNORE', nl: 'IGNORE', + it: 'IGNORE', }, [VehiclePart.BUMPER_BACK]: { en: 'Rear Bumper', fr: 'Pare-chocs arrière', de: 'Hintere Stoßstange', nl: 'Achterbumper', + it: 'Paraurti posteriore', }, [VehiclePart.BUMPER_FRONT]: { en: 'Front Bumper', fr: 'Pare-chocs avant', de: 'Vordere Stoßstange', nl: 'Voorbumper', + it: 'Paraurti anteriore', }, [VehiclePart.DOOR_BACK_LEFT]: { en: 'Rear Door Left', fr: 'Portière arrière gauche', de: 'Tür hinten links', nl: 'Achterdeur links', + it: 'Porta posteriore sinistra', }, [VehiclePart.DOOR_BACK_RIGHT]: { en: 'Rear Door Right', fr: 'Portière arrière droite', de: 'Tür hinten rechts', nl: 'Achterdeur rechts', + it: 'Porta posteriore destra', }, [VehiclePart.DOOR_FRONT_LEFT]: { en: 'Front Door Left', fr: 'Portière avant gauche', de: 'Tür vorne links', nl: 'Voordeur links', + it: 'Porta anteriore sinistra', }, [VehiclePart.DOOR_FRONT_RIGHT]: { en: 'Front Door Right', fr: 'Portière avant droite', de: 'Tür vorne rechts', nl: 'Voordeur rechts', + it: 'Porta anteriore destra', }, [VehiclePart.FENDER_BACK_LEFT]: { en: 'Rear Fender Left', fr: 'Aile arrière gauche', de: 'Kotflügel hinten links', nl: 'Achterkant linker spatbord', + it: 'Parafango posteriore sinistro', }, [VehiclePart.FENDER_BACK_RIGHT]: { en: 'Rear Fender Right', fr: 'Aile arrière droite', de: 'Kotflügel hinten rechts', nl: 'Achterkant rechter spatbord', + it: 'Parafango posteriore destro', }, [VehiclePart.FENDER_FRONT_LEFT]: { en: 'Front Fender Left', fr: 'Aile avant gauche', de: 'Linker vorderer Kotflügel', nl: 'Voorste linker spatbord', + it: 'Parafango anteriore sinistro', }, [VehiclePart.FENDER_FRONT_RIGHT]: { en: 'Front Fender Right', fr: 'Aile avant droite', de: 'Rechter vorderer Flügel', nl: 'Voorste rechter spatbord', + it: 'Parafango anteriore destro', }, [VehiclePart.FOG_LIGHT_BACK_LEFT]: { en: 'Rear Fog Light Left', fr: 'Phare anti-brouillard arrière gauche', de: 'Nebelscheinwerfer hinten links', nl: 'Achterste linker mistlamp', + it: 'Faro antinebbia posteriore sinistro', }, [VehiclePart.FOG_LIGHT_BACK_RIGHT]: { en: 'Rear Fog Light Right', fr: 'Phare anti-brouillard arrière droit', de: 'Nebelscheinwerfer hinten rechts', nl: 'Achterste rechter mistlamp', + it: 'Faro antinebbia posteriore destro', }, [VehiclePart.FOG_LIGHT_FRONT_LEFT]: { en: 'Front Fog Light Left', fr: 'Phare anti-brouillard avant gauche', de: 'Nebelscheinwerfer vorne links', nl: 'Voorste linker mistlamp', + it: 'Faro antinebbia anteriore sinistro', }, [VehiclePart.FOG_LIGHT_FRONT_RIGHT]: { en: 'Front Fog Light Right', fr: 'Phare anti-brouillard avant droit', de: 'Nebelscheinwerfer vorne rechts', nl: 'Voorste rechter mistlamp', + it: 'Faro antinebbia anteriore destro', }, [VehiclePart.GRILL]: { en: 'Grill', fr: 'Grille', de: 'Gitter', nl: 'Grill', + it: 'Griglia', }, [VehiclePart.GRILL_LOW]: { en: 'Grill Low', fr: 'Grille bas', de: 'Gitter unten', nl: 'Lage grill', + it: 'Griglia bassa', }, [VehiclePart.GRILL_RADIATOR]: { en: 'Radiator Grill', fr: 'Grille radiateur', de: 'Heizkörpergitter', nl: 'Radiatorgrill', + it: 'Griglia del radiatore', }, [VehiclePart.HANDLE_BACK_LEFT]: { en: 'Rear Handle Left', fr: 'Poignée arrière gauche', de: 'Griff hinten links', nl: 'Achterste linker greep', + it: 'Maniglia posteriore sinistra', }, [VehiclePart.HANDLE_BACK_RIGHT]: { en: 'Rear Handle Right', fr: 'Poignée arrière droite', de: 'Griff hinten rechts', nl: 'Achterste rechter greep', + it: 'Maniglia posteriore destra', }, [VehiclePart.HANDLE_FRONT_LEFT]: { en: 'Front Handle Left', fr: 'Poignée avant gauche', de: 'Griff vorne links', nl: 'Voorste linker greep', + it: 'Maniglia anteriore sinistra', }, [VehiclePart.HANDLE_FRONT_RIGHT]: { en: 'Front Handle Right', fr: 'Poignée avant droite', de: 'Griff vorne rechts', nl: 'Voorste rechter greep', + it: 'Maniglia anteriore destra', }, [VehiclePart.HEADER_PANEL]: { en: 'Header Panel', fr: 'Panneau de tête', de: 'Kopfleiste', nl: 'Headerpaneel', + it: 'Pannello superiore', }, [VehiclePart.HEAD_LIGHT_LEFT]: { en: 'Head Light Left', fr: 'Phare gauche', de: 'Linker Scheinwerfer', nl: 'Linker koplamp', + it: 'Faro sinistro', }, [VehiclePart.HEAD_LIGHT_RIGHT]: { en: 'Head Light Right', fr: 'Phare droit', de: 'Rechter Scheinwerfer', nl: 'Rechter koplamp', + it: 'Faro destro', }, [VehiclePart.HOOK]: { en: 'Tow Hook', fr: 'Crochet de remorquage', de: 'Abschlepphaken', nl: 'Trekhaak', + it: 'Gancio di traino', }, [VehiclePart.HUBCAP]: { en: 'Hubcap', fr: 'Enjoliveur', de: 'Radkappe', nl: 'Velgmuts', + it: 'Copricerchio', }, [VehiclePart.HUBCAP_BACK_LEFT]: { en: 'Rear Hubcap Left', fr: 'Enjoliveur arrière gauche', de: 'Radkappe hinten links', nl: 'Achterste linker velgmuts', + it: 'Copricerchio posteriore sinistro', }, [VehiclePart.HUBCAP_BACK_RIGHT]: { en: 'Rear Hubcap Right', fr: 'Enjoliveur arrière droit', de: 'Radkappe hinten rechts', nl: 'Achterste rechter velgmuts', + it: 'Copricerchio posteriore destro', }, [VehiclePart.HUBCAP_FRONT_LEFT]: { en: 'Front Hubcap Left', fr: 'Enjoliveur avant gauche', de: 'Radkappe vorne links', nl: 'Voorste linker velgmuts', + it: 'Copricerchio anteriore sinistro', }, [VehiclePart.HUBCAP_FRONT_RIGHT]: { en: 'Front Hubcap Right', fr: 'Enjoliveur avant droite', de: 'Radkappe vorne rechts', nl: 'Voorste rechter velgmuts', + it: 'Copricerchio anteriore destro', }, [VehiclePart.INDICATOR_LIGHT_LEFT]: { en: 'Indicator Light Left', fr: 'Clignotant gauche', de: 'Blinkend links', nl: 'Linker richtingaanwijzer', + it: 'Indicator di direzione sinistro', }, [VehiclePart.INDICATOR_LIGHT_RIGHT]: { en: 'Indicator Light Right', fr: 'Clignotant droit', de: 'Blinkend rechts', nl: 'Rechter richtingaanwijzer', + it: 'Indicator di direzione destro', }, [VehiclePart.LICENSE_PLATE_BACK]: { en: 'Rear License Plate', fr: "Plaque d'immatriculation arrière", de: 'Autokennzeichen hinten', nl: 'Achterste nummerplaat', + it: 'Targa posteriore', }, [VehiclePart.LICENSE_PLATE_FRONT]: { en: 'Front License Plate', fr: "Plaque d'immatriculation avant", de: 'Autokennzeichen vorne', nl: 'Voorste nummerplaat', + it: 'Targa anteriore', }, [VehiclePart.LOGO]: { en: 'Logo', fr: 'Logo', de: 'Logo', nl: 'Logo', + it: 'Logo', }, [VehiclePart.MIRROR_LEFT]: { en: 'Mirror Left', fr: 'Rétroviseur gauche', de: 'Linker Spiegel', nl: 'Linker spiegel', + it: 'Specchietto sinistro', }, [VehiclePart.MIRROR_RIGHT]: { en: 'Mirror Right', fr: 'Rétroviseur droit', de: 'Rechter Spiegel', nl: 'Rechter spiegel', + it: 'Specchietto destro', }, [VehiclePart.MIRROR_SUPPORT]: { en: 'Mirror Support', fr: 'Support de rétroviseur', de: 'Spiegelhalterung', nl: 'Spiegelsteun', + it: 'Supporto specchietto', }, [VehiclePart.QUARTER_WINDOW_BACK_LEFT]: { en: 'Rear Quarter Window Left', fr: 'Vitres latérale arrière gauche', de: 'Seitenfenster hinten links', nl: 'Achterste linker zijkantvenster', + it: 'Vetro laterale posteriore sinistro', }, [VehiclePart.QUARTER_WINDOW_BACK_RIGHT]: { en: 'Rear Quarter Window Right', fr: 'Vitres latérale arrière droite', de: 'Seitenfenster hinten rechts', nl: 'Achterste rechter zijkantvenster', + it: 'Vetro laterale posteriore destro', }, [VehiclePart.QUARTER_WINDOW_FRONT_LEFT]: { en: 'Front Quarter Window Left', fr: 'Vitres latérale avant gauche', de: 'Seitenfenster vorne links', nl: 'Voorste linker zijkantvenster', + it: 'Vetro laterale anteriore sinistro', }, [VehiclePart.QUARTER_WINDOW_FRONT_RIGHT]: { en: 'Front Quarter Window Right', fr: 'Vitres latérale avant droite', de: 'Seitenfenster vorne rechts', nl: 'Voorste rechter zijkantvenster', + it: 'Vetro laterale anteriore destro', }, [VehiclePart.ROCKER_PANEL]: { en: 'Rocker Panel', fr: 'Bas de caisse', de: 'Schweller', nl: 'Rockerpaneel', + it: 'Basamento', }, [VehiclePart.ROCKER_PANEL_LEFT]: { en: 'Rocker Panel Left', fr: 'Bas de caisse gauche', de: 'Schweller links', nl: 'Linker rockerpaneel', + it: 'Basamento sinistro', }, [VehiclePart.ROCKER_PANEL_RIGHT]: { en: 'Rocker Panel Right', fr: 'Bas de caisse droit', de: 'Rechter Schweller', nl: 'Rechter rockerpaneel', + it: 'Basamento destro', }, [VehiclePart.TAIL_LIGHT_CENTER]: { en: 'Tail Light Left', fr: 'Feu arrière centre', de: 'Rücklicht Mitte', nl: 'Achterlicht midden', + it: 'Luce posteriore centrale', }, [VehiclePart.TAIL_LIGHT_LEFT]: { en: 'Tail Light Left', fr: 'Feu arrière gauche', de: 'Rücklicht links', nl: 'Linker achterlicht', + it: 'Luce posteriore sinistra', }, [VehiclePart.TAIL_LIGHT_RIGHT]: { en: 'Tail Light Right', fr: 'Feu arrière droite', de: 'Rücklicht rechts', nl: 'Rechter achterlicht', + it: 'Luce posteriore destra', }, [VehiclePart.TURN_SIGNAL_FRONT_LATERAL_LEFT]: { en: 'Front Turn Signal Lateral Left', fr: 'Clignotant avant latéral gauche', de: 'Blinker vorne seitlich links', nl: 'Voorste linker zijblinker', + it: 'Indicatore di direzione anteriore laterale sinistro', }, [VehiclePart.TURN_SIGNAL_FRONT_LATERAL_RIGHT]: { en: 'Front Turn Signal Lateral Right', fr: 'Clignotant avant latéral droit', de: 'Blinker vorne seitlich rechts', nl: 'Voorste rechter zijblinker', + it: 'Indicatore di direzione anteriore laterale destro', }, [VehiclePart.WHEEL]: { en: 'Wheel', fr: 'Roue', de: 'Rad', nl: 'Wiel', + it: 'Ruota', }, [VehiclePart.WHEEL_BACK_LEFT]: { en: 'Rear Wheel Left', fr: 'Roue arrière gauche', de: 'Linkes Hinterrad', nl: 'Achterste linker wiel', + it: 'Ruota posteriore sinistra', }, [VehiclePart.WHEEL_BACK_RIGHT]: { en: 'Rear Wheel Right', fr: 'Roue arrière droite', de: 'Rechtes Hinterrad', nl: 'Achterste rechter wiel', + it: 'Ruota posteriore destra', }, [VehiclePart.WHEEL_FRONT_LEFT]: { en: 'Front Wheel Left', fr: 'Roue avant gauche', de: 'Vorderrad links', nl: 'Voorste linker wiel', + it: 'Ruota anteriore sinistra', }, [VehiclePart.WHEEL_FRONT_RIGHT]: { en: 'Front Wheel Right', fr: 'Roue avant droite', de: 'Vorderrad rechts', nl: 'Voorste rechter wiel', + it: 'Ruota anteriore destra', }, [VehiclePart.WINDOW_BACK_LEFT]: { en: 'Rear Window Left', fr: 'Vitre arrière gauche', de: 'Hintere linke Scheibe', nl: 'Achterste linker raam', + it: 'Vetro posteriore sinistro', }, [VehiclePart.WINDOW_BACK_RIGHT]: { en: 'Rear Window Right', fr: 'Vitre arrière droite', de: 'Fenster hinten rechts', nl: 'Achterste rechter raam', + it: 'Vetro posteriore destro', }, [VehiclePart.WINDOW_CORNER_LEFT]: { en: 'Corner Window Left', fr: "Vitre d'angle gauche", de: 'Fenster in der linken Ecke', nl: 'Linker hoekraam', + it: "Vetro d'angolo sinistro", }, [VehiclePart.WINDOW_CORNER_RIGHT]: { en: 'Corner Window Right', fr: "Vitre d'angle droite", de: 'Fenster in der rechten Ecke', nl: 'Rechter hoekraam', + it: "Vetro d'angolo destro", }, [VehiclePart.WINDOW_FRONT_LEFT]: { en: 'Front Window Left', fr: 'Vitre avant gauche', de: 'Linke vordere Fensterscheibe', nl: 'Voorste linker raam', + it: 'Vetro anteriore sinistro', }, [VehiclePart.WINDOW_FRONT_RIGHT]: { en: 'Front Window Right', fr: 'Vitre avant droite', de: 'Fenster vorne rechts', nl: 'Voorste rechter raam', + it: 'Vetro anteriore destro', }, [VehiclePart.WINDSHIELD_BACK]: { en: 'Windshield Back', fr: 'Pare-brise arrière', de: 'Hintere Windschutzscheibe', nl: 'Achterste ruit', + it: 'Parabrezza posteriore', }, [VehiclePart.WINDSHIELD_FRONT]: { en: 'Windshield Front', fr: 'Pare-brise avant', de: 'Windschutzscheibe vorne', nl: 'Voorruit', + it: 'Parabrezza anteriore', }, [VehiclePart.WIPER]: { en: 'Wiper', fr: 'Essuie-glace', de: 'Scheibenwischer', nl: 'Scheerwiper', + it: 'Tergicristallo', }, [VehiclePart.WIPER_BACK]: { en: 'Rear Wiper', fr: 'Essuie-glace arrière', de: 'Heckscheibenwischer', nl: 'Achterste scheerwiper', + it: 'Tergicristallo posteriore', }, [VehiclePart.WIPER_FRONT]: { en: 'Front Wiper', fr: 'Essuie-glace avant', de: 'Scheibenwischer vorne', nl: 'Voorste scheerwiper', + it: 'Tergicristallo anteriore', }, [VehiclePart.FRONT_SPOILER]: { en: 'Front Spoiler', fr: 'Aileron avant', de: 'Frontspoiler', nl: 'Voorste spoiler', + it: 'Alerone anteriore', }, [VehiclePart.REAR_SPOILER]: { en: 'Rear Spoiler', fr: 'Aileron arrière', de: 'Heckspoiler', nl: 'Achterste spoiler', + it: 'Alerone posteriore', }, [VehiclePart.HOOD]: { en: 'Hood', fr: 'Capot', de: 'Motorhaube', nl: 'Motorkap', + it: 'Cofano', }, [VehiclePart.PETROL_DOOR]: { en: 'Petrol Door', fr: 'Trappe à essence', de: 'Tankklappe', nl: 'Brandstofklep', + it: 'Sportello carburante', }, [VehiclePart.PILLAR]: { en: 'Pillar', fr: 'Carrosserie', de: 'Karosserie', nl: 'Kolom', + it: 'Montante', }, [VehiclePart.ROOF]: { en: 'Roof', fr: 'Toit', de: 'Dach', nl: 'Dak', + it: 'Tetto', }, [VehiclePart.TRUNK]: { en: 'Trunk', fr: 'Coffre', de: 'Kofferraum', nl: 'Kofferbak', + it: 'Bagagliaio', }, [VehiclePart.BACKGROUND]: { en: 'Background', fr: 'Arrière-plan', de: 'Hintergrund', nl: 'Achtergrond', + it: 'Sfondo', }, [VehiclePart.CAR_INSIDE]: { en: 'Car Inside', fr: 'Intérieur', de: 'Auto innen', nl: 'Auto binnen', + it: 'Interno auto', }, [VehiclePart.DAMAGED_CAR_INSIDE]: { en: 'Damaged Car Inside', fr: 'Intérieur endommagé', de: 'Beschädigtes Auto innen', nl: 'Beschadigde auto binnen', + it: 'Interno auto danneggiato', }, [VehiclePart.HANDLE_BACK_CENTER]: { en: 'Handle Back Center', fr: 'Poignée arrière centre', de: 'Griff Rückseite Mitte', nl: 'Handgreep Terug Midden', + it: 'Maniglia posteriore centrale', }, [VehiclePart.RIM_BACK_LEFT]: { en: 'Back left rim', fr: 'Jante arrière gauche', de: 'Hintere linke Felge', nl: 'Achtervelg links', + it: 'Rim posteriore sinistro', }, [VehiclePart.RIM_BACK_RIGHT]: { en: 'Back right rim', fr: 'Jante arrière droite', de: 'Hintere rechte Felge', nl: 'Achtervelg rechts', + it: 'Rim posteriore destro', }, [VehiclePart.RIM_FRONT_LEFT]: { en: 'Front left rim', fr: 'Jante avant gauche', de: 'Vordere linke Felge', nl: 'Voorvelg links', + it: 'Rim anteriore sinistro', }, [VehiclePart.RIM_FRONT_RIGHT]: { en: 'Front right rim', fr: 'Jante avant droite', de: 'Vordere rechte Felge', nl: 'Voorvelg rechts', + it: 'Rim anteriore destro', }, [VehiclePart.INTERIOR]: { en: 'Interior', fr: 'Intérieur', de: 'Innenraum', nl: 'Interieur', + it: 'Interni', }, }; diff --git a/packages/common/test/hooks/useObjectTranslation.test.ts b/packages/common/test/hooks/useObjectTranslation.test.ts index 0da3eb68d..cc49c5010 100644 --- a/packages/common/test/hooks/useObjectTranslation.test.ts +++ b/packages/common/test/hooks/useObjectTranslation.test.ts @@ -3,7 +3,13 @@ import { useTranslation } from 'react-i18next'; import { renderHook } from '@testing-library/react-hooks'; import { useObjectTranslation } from '../../src'; -const obj = { en: 'Hello', fr: 'Bonjour', de: 'Hallo', nl: 'HalloDt' } as TranslationObject; +const obj = { + en: 'Hello', + fr: 'Bonjour', + de: 'Hallo', + nl: 'HalloDt', + it: 'Ciao', +} as TranslationObject; describe('useObjectTranslation hook', () => { it('should return a tObj function', () => { diff --git a/packages/common/test/i18n/utils.test.tsx b/packages/common/test/i18n/utils.test.tsx index f23c536dc..2b3915a76 100644 --- a/packages/common/test/i18n/utils.test.tsx +++ b/packages/common/test/i18n/utils.test.tsx @@ -113,5 +113,9 @@ describe('Monkvision i18n utils', () => { it("should return 'en' prefix by default if langage is not found in monkLangages types package", () => { expect(getLanguage('es-TEST')).toEqual('en'); }); + + it("should return 'it' if italian is selected", () => { + expect(getLanguage('it-IT')).toEqual('it'); + }); }); }); diff --git a/packages/inspection-capture-web/src/i18n.ts b/packages/inspection-capture-web/src/i18n.ts index 1eccd4509..46aae6d58 100644 --- a/packages/inspection-capture-web/src/i18n.ts +++ b/packages/inspection-capture-web/src/i18n.ts @@ -3,6 +3,7 @@ import en from './translations/en.json'; import fr from './translations/fr.json'; import de from './translations/de.json'; import nl from './translations/nl.json'; +import it from './translations/it.json'; /** * i18n instance of the Inspection CApture Web package. You can use this instance to automatically sync your application @@ -14,6 +15,7 @@ const i18nInspectionCaptureWeb = i18nCreateSDKInstance({ fr: { translation: fr }, de: { translation: de }, nl: { translation: nl }, + it: { translation: it }, }, }); diff --git a/packages/inspection-capture-web/src/translations/it.json b/packages/inspection-capture-web/src/translations/it.json new file mode 100644 index 000000000..2a8f03aef --- /dev/null +++ b/packages/inspection-capture-web/src/translations/it.json @@ -0,0 +1,108 @@ +{ + "photo": { + "badConnectionWarning": { + "message": "Stiamo riscontrando problemi di connessione. Il caricamento delle foto potrebbe richiedere più tempo del solito.", + "confirm": "Ho capito" + }, + "hud": { + "sight": { "addDamageBtn": "Danno" }, + "addDamage": { + "cancelBtn": "Annulla", + "damagedPartCounter": "1 / 2 • Parte danneggiata", + "closeupPictureCounter": "2 / 2 • Danno in primo piano", + "infoBtn": "Posiziona il mirino sulla parte danneggiata e premi il pulsante di scatto", + "infoCloseup": "Scatta una foto ravvicinata del danno", + "selectPart": "Seleziona la parte danneggiata. Usa le frecce per ruotare il veicolo e vedere l'altro lato", + "selectParts": "Seleziona le parti danneggiate. Usa le frecce per ruotare il veicolo e vedere l'altro lato." + }, + "error": { + "retry": "Riprova", + "missingTasks": "L'ispezione fornita non contiene alcune attività richieste dal modulo di acquisizione attuale.", + "invalidToken": "Il token di autenticazione utilizzato non è valido.", + "expiredToken": "Il token di autenticazione utilizzato è scaduto.", + "insufficientAuth": "Non hai le autorizzazioni necessarie per eseguire questa azione.", + "inspectionLoading": "Si è verificato un errore durante il caricamento dell'ispezione. Riprova tra qualche istante o contatta il supporto con il seguente ID ispezione:" + }, + "closeConfirm": { + "message": "Sei sicuro di voler chiudere lo strumento di acquisizione?", + "cancel": "Annulla", + "confirm": "Sì" + }, + "guidelines": { + "defaultGuideline": "Le indicazioni sul punto di vista dell'immagine possono essere visualizzate qui.", + "disable": "Non mostrare più", + "validate": "Ok" + }, + "tutorial": { + "welcome": "Benvenuto alla tua prima ispezione!", + "title": "Come usarlo", + "guideline": "Fai il giro del veicolo per scattare tutte le foto e segui le istruzioni in alto per posizionarti con l'angolazione corretta.", + "sightTutorial": "Usa l'immagine in basso a sinistra per aiutarti nell'inquadratura.
Tocca per vedere una spiegazione dettagliata.", + "sight": "Allinea il veicolo con le linee il più possibile per ottenere la foto migliore.
Premi il pulsante di scatto per scattare la foto.", + "next": "Avanti" + }, + "sightTutorial": { + "tip": "Consiglio", + "defaultTutorialWithImage": "Ecco un'immagine di riferimento.\nCerca di riprodurre l'inquadratura il più fedelmente possibile.", + "defaultTutorialWithoutImage": "Posizionati come indicato nello schema a sinistra,\nassicurandoti che la fotocamera sia all'altezza giusta." + } + }, + "gallery": { "next": "Avanti: foto del veicolo" } + }, + "video": { + "introduction": { "title": "Registra un video di ispezione del veicolo" }, + "permissions": { + "camera": { + "title": "Fotocamera", + "description": "Per registrare un video, devi autorizzare l'accesso alla fotocamera del dispositivo" + }, + "compass": { + "title": "Bussola", + "description": "Per rilevare una rotazione completa a 360° del veicolo, devi autorizzare l'accesso alla bussola del dispositivo" + }, + "confirm": "Gestisci autorizzazioni" + }, + "tutorial": { + "start": { + "title": "Inizia dalla parte anteriore", + "description": "Mantieni una distanza di un metro e gira lentamente intorno al veicolo, catturando la linea del tetto fino al suolo." + }, + "finish": { + "title": "Termina dove hai iniziato", + "description": "La registrazione dovrebbe essere completata in circa 45 secondi." + }, + "photos": { + "title": "Scatta foto se necessario", + "description": "Premi il pulsante di scatto per scattare foto di remarketing o danni durante la registrazione." + }, + "confirm": "Registra un video" + }, + "recording": { + "discardDialog": { + "message": "Vuoi annullare il video? Non hai completato il giro del veicolo.", + "keepRecording": "Continua la registrazione", + "discardVideo": "Annulla il video" + }, + "fastMovementsDialog": { + "walkingTooFast": "Stai andando troppo veloce! Rallenta un po'. Dovresti impiegare circa un minuto per girare intorno al veicolo.", + "phoneShaking": "Il tuo dispositivo sta tremando troppo! Cerca di tenere la fotocamera stabile durante la registrazione.", + "confirm": "OK" + }, + "tooltip": { + "start": "Quando sei davanti al veicolo, premi il pulsante per iniziare a registrare il video.", + "end": "Quando hai completato il giro del veicolo, premi il pulsante per terminare la registrazione." + } + }, + "processing": { + "processing": "Elaborazione del video...", + "uploading": "Caricamento del video...", + "success": "Elaborazione del video completata!", + "error": "Si è verificato un errore durante la finalizzazione dell'ispezione. ID ispezione:", + "done": "Fatto" + } + }, + "orientationEnforcer": { + "title": "Ruota il tuo dispositivo.", + "description": "Potrebbe essere necessario sbloccare l'orientamento del dispositivo nelle impostazioni del telefono." + } +} diff --git a/packages/inspection-capture-web/test/PhotoCapture/PhotoCapture.test.tsx b/packages/inspection-capture-web/test/PhotoCapture/PhotoCapture.test.tsx index 62c676010..49876a329 100644 --- a/packages/inspection-capture-web/test/PhotoCapture/PhotoCapture.test.tsx +++ b/packages/inspection-capture-web/test/PhotoCapture/PhotoCapture.test.tsx @@ -146,6 +146,7 @@ function createProps(): PhotoCaptureProps { fr: 'fr-test', de: 'de-test', nl: 'nl-test', + it: 'it-test', sightIds: ['sightId-test-1', 'sightId-test-2'], }, ], @@ -159,6 +160,7 @@ function createProps(): PhotoCaptureProps { fr: 'fr-test', de: 'de-test', nl: 'nl-test', + it: 'it-test', imageReferenceBySightId: { keySight1: 'valueSight1' }, }, ], diff --git a/packages/inspection-capture-web/test/PhotoCapture/PhotoCaptureHUD/PhotoCaptureHUDElementsSight/SightGuideline.test.tsx b/packages/inspection-capture-web/test/PhotoCapture/PhotoCaptureHUD/PhotoCaptureHUDElementsSight/SightGuideline.test.tsx index 4bfec7923..d3a20dfe4 100644 --- a/packages/inspection-capture-web/test/PhotoCapture/PhotoCaptureHUD/PhotoCaptureHUDElementsSight/SightGuideline.test.tsx +++ b/packages/inspection-capture-web/test/PhotoCapture/PhotoCaptureHUD/PhotoCaptureHUDElementsSight/SightGuideline.test.tsx @@ -29,6 +29,7 @@ function createProps(): SightGuidelineProps { fr: 'fr-test', de: 'de-test', nl: 'nl-test', + it: 'it-test', sightIds: ['sightId-test-1', 'sightId-test-2'], }, ], diff --git a/packages/network/src/api/image/requests.ts b/packages/network/src/api/image/requests.ts index e67c3bf82..efafe5a53 100644 --- a/packages/network/src/api/image/requests.ts +++ b/packages/network/src/api/image/requests.ts @@ -243,6 +243,7 @@ function getImageLabel(options: AddImageOptions): TranslationObject | undefined fr: `Trame Vidéo ${options.frameIndex}`, de: `Videobild ${options.frameIndex}`, nl: `Videoframe ${options.frameIndex}`, + it: `Frame Video ${options.frameIndex}`, }; } if (options.uploadType === ImageUploadType.VIDEO_MANUAL_PHOTO) { @@ -251,6 +252,7 @@ function getImageLabel(options: AddImageOptions): TranslationObject | undefined fr: `Photo Manuelle Vidéo`, de: `Foto Manuell Video`, nl: `Foto-handleiding Video`, + it: `Foto Manuale Video`, }; } if (options.uploadType === ImageUploadType.PART_SELECT_SHOT) { @@ -260,6 +262,7 @@ function getImageLabel(options: AddImageOptions): TranslationObject | undefined fr: `Photo Zoomée sur ${partsTranslation.map((part) => part.en).join(', ')}`, de: `Gezoomtes an ${partsTranslation.map((part) => part.en).join(', ')}`, nl: `Nabij aan ${partsTranslation.map((part) => part.en).join(', ')}`, + it: `Close Up su ${partsTranslation.map((part) => part.en).join(', ')}`, }; } return { @@ -267,6 +270,7 @@ function getImageLabel(options: AddImageOptions): TranslationObject | undefined fr: options.firstShot ? 'Photo Zoomée (partie)' : 'Photo Zoomée (dégât)', de: options.firstShot ? 'Gezoomtes Foto (Teil)' : 'Close Up (Schaden)', nl: options.firstShot ? 'Nabij (onderdeel)' : 'Nabij (schade)', + it: options.firstShot ? 'Close Up (parte)' : 'Close Up (danno)', }; } diff --git a/packages/network/test/api/image/mappers.test.ts b/packages/network/test/api/image/mappers.test.ts index edd9a9c20..5175c633b 100644 --- a/packages/network/test/api/image/mappers.test.ts +++ b/packages/network/test/api/image/mappers.test.ts @@ -64,6 +64,7 @@ function createApiImage(params?: { sightId?: string }): ApiImage { fr: 'test-label-fr', de: 'test-label-de', nl: 'test-label-nl', + it: 'test-label-it', }, }, binary_size: 123456, diff --git a/packages/network/test/api/image/requests.test.ts b/packages/network/test/api/image/requests.test.ts index 337016570..7487803ba 100644 --- a/packages/network/test/api/image/requests.test.ts +++ b/packages/network/test/api/image/requests.test.ts @@ -393,6 +393,7 @@ describe('Image requests', () => { fr: options.firstShot ? 'Photo Zoomée (partie)' : 'Photo Zoomée (dégât)', de: options.firstShot ? 'Gezoomtes Foto (Teil)' : 'Close Up (Schaden)', nl: options.firstShot ? 'Nabij (onderdeel)' : 'Nabij (schade)', + it: options.firstShot ? 'Close Up (parte)' : 'Close Up (danno)', }, created_at: expect.any(String), }, @@ -429,6 +430,7 @@ describe('Image requests', () => { fr: `Photo Zoomée sur ${partsTranslation.map((part) => part.en).join(', ')}`, de: `Gezoomtes an ${partsTranslation.map((part) => part.en).join(', ')}`, nl: `Nabij aan ${partsTranslation.map((part) => part.en).join(', ')}`, + it: `Close Up su ${partsTranslation.map((part) => part.en).join(', ')}`, }, created_at: expect.any(String), }, @@ -465,6 +467,7 @@ describe('Image requests', () => { fr: `Trame Vidéo ${options.frameIndex}`, de: `Videobild ${options.frameIndex}`, nl: `Videoframe ${options.frameIndex}`, + it: `Frame Video ${options.frameIndex}`, }, created_at: expect.any(String), frame_index: options.frameIndex, @@ -499,6 +502,7 @@ describe('Image requests', () => { fr: `Photo Manuelle Vidéo`, de: `Foto Manuell Video`, nl: `Foto-handleiding Video`, + it: `Foto Manuale Video`, }, created_at: expect.any(String), }, diff --git a/packages/sights/research/data/labels.json b/packages/sights/research/data/labels.json index 3e1c41ff1..f4dec88f3 100644 --- a/packages/sights/research/data/labels.json +++ b/packages/sights/research/data/labels.json @@ -4,636 +4,727 @@ "en": "Back Seats", "fr": "Sièges arrière", "de": "Rücksitze", - "nl": "Achterbank" + "nl": "Achterbank", + "it": "Sedili posteriori" }, "beauty-shot-left": { "key": "beauty-shot-left", "en": "Beauty Shot Left", "fr": "Vue entière gauche", "de": "Linke Vollansicht", - "nl": "Mooie shot links" + "nl": "Mooie shot links", + "it": "Foto panoramica sinistra" }, "dashboard": { "key": "dashboard", "en": "Dashboard", "fr": "Tableau de bord", "de": "Armaturenbrett", - "nl": "Dashboard" + "nl": "Dashboard", + "it": "Cruscotto" }, "dashboard-from-back-seat": { "key": "dashboard-from-back-seat", "en": "Dashboard From Back Seat", "fr": "Tableau de bord siège arrière", "de": "Armaturenbrett vom Rücksitz", - "nl": "Dashboard vanaf achterbank" + "nl": "Dashboard vanaf achterbank", + "it": "Cruscotto dalla parte posteriore" }, "dashboard-from-driver-seat": { "key": "dashboard-from-driver-seat", "en": "Dashboard From Driver Seat", "fr": "Tableau de bord siège conducteur", "de": "Armaturenbrett vom Fahrersitz aus", - "nl": "Dashboard vanaf bestuurdersstoel" + "nl": "Dashboard vanaf bestuurdersstoel", + "it": "Cruscotto dalla del conducente" }, "doors-left": { "key": "doors-left", "en": "Doors Left", "fr": "Portières gauches", "de": "Linke Tür", - "nl": "Linkerdeuren" + "nl": "Linkerdeuren", + "it": "Porte sinistre" }, "doors-right": { "key": "doors-right", "en": "Doors Right", "fr": "Portières droites", "de": "Gerade Türen", - "nl": "Rechterdeuren" + "nl": "Rechterdeuren", + "it": "Porte destre" }, "engine-left-side": { "key": "engine-left-side", "en": "Engine Left Side", "fr": "Moteur gauche", "de": "Linker Motor", - "nl": "Linkermotor" + "nl": "Linkermotor", + "it": "Motore lato sinistro" }, "engine-right-side": { "key": "engine-right-side", "en": "Engine Right Side", "fr": "Moteur droite", "de": "Rechter Motor", - "nl": "Rechtermotor" + "nl": "Rechtermotor", + "it": "Motore lato destro" }, "front": { "key": "front", "en": "Front", "fr": "Avant", "de": "Vorderseite", - "nl": "Voorzijde" + "nl": "Voorzijde", + "it": "Parte anteriore" }, "front-bumper-side-left": { "key": "front-bumper-side-left", "en": "Front Bumper Side Left", "fr": "Pare-chocs avant gauche", "de": "Stoßstange vorne links", - "nl": "Voorbumper links" + "nl": "Voorbumper links", + "it": "Paraurti anteriore lato sinistro" }, "front-bumper-side-right": { "key": "front-bumper-side-right", "en": "Front Bumper Side Right", "fr": "Pare-chocs avant droite", "de": "Stoßstange vorne rechts", - "nl": "Voorbumper rechts" + "nl": "Voorbumper rechts", + "it": "Paraurti anteriore lato destro" }, "front-door-left": { "key": "front-door-left", "en": "Front Door Left", "fr": "Portière avant gauche", "de": "Tür vorne links", - "nl": "Voordeur links" + "nl": "Voordeur links", + "it": "Porta anteriore sinistra" }, "front-door-right": { "key": "front-door-right", "en": "Front Door Right", "fr": "Portière avant droite", "de": "Vordertür rechts", - "nl": "Voordeur rechts" + "nl": "Voordeur rechts", + "it": "Porta anteriore destra" }, "front-fender-left": { "key": "front-fender-left", "en": "Front Left", "fr": "Avant gauche", "de": "Vorne links", - "nl": "Linksvoor" + "nl": "Linksvoor", + "it": "Anteriore sinistro" }, "front-fender-right": { "key": "front-fender-right", "en": "Front Right", "fr": "Aile droite", "de": "Vorne rechts", - "nl": "Rechtsvoor" + "nl": "Rechtsvoor", + "it": "Anteriore destro" }, "front-lateral-full-right": { "key": "front-lateral-full-right", "en": "Front Full Right", "fr": "Avant droite", "de": "Vorne rechts", - "nl": "Volledige voorkant rechts" + "nl": "Volledige voorkant rechts", + "it": "Anteriore destra completa" }, "front-lateral-left": { "key": "front-lateral-left", "en": "Front Lateral Left", "fr": "Avant latéral gauche", "de": "Vorderseite seitlich links", - "nl": "Voorzijde zijwaarts links" + "nl": "Voorzijde zijwaarts links", + "it": "Anteriore laterale sinistra" }, "front-lateral-low-left": { "key": "front-lateral-low-left", "en": "Front Lateral Low Left", "fr": "Avant latéral gauche - vue basse", "de": "Vorne Seitlich Niedrig Links", - "nl": "Voorzijde zijwaarts laag links" + "nl": "Voorzijde zijwaarts laag links", + "it": "Anteriore laterale bassa sinistra" }, "front-lateral-low-right": { "key": "front-lateral-low-right", "en": "Front Lateral Low Right", "fr": "Avant latéral droite - vue basse", "de": "Vorne Seitlich Niedrig Rechts", - "nl": "Voorzijde zijwaarts laag rechts" + "nl": "Voorzijde zijwaarts laag rechts", + "it": "Anteriore laterale bassa destra" }, "front-lateral-right": { "key": "front-lateral-right", "en": "Front Lateral Right", "fr": "Avant latéral droite", "de": "Vorderseite seitlich rechts", - "nl": "Voorzijde zijwaarts rechts" + "nl": "Voorzijde zijwaarts rechts", + "it": "Anteriore laterale destra" }, "front-low": { "key": "front-low", "en": "Front Low", "fr": "Avant - vue basse", "de": "Vorderseite Niedrig", - "nl": "Voorzijde laag" + "nl": "Voorzijde laag", + "it": "Parte anteriore bassa" }, "front-roof-left": { "key": "front-roof-left", "en": "Front Roof Left", "fr": "Toit avant gauche", "de": "Dach vorne links", - "nl": "Voorzijde dak links" + "nl": "Voorzijde dak links", + "it": "Tetto anteriore sinistro" }, "front-seats": { "key": "front-seats", "en": "Front Seats", "fr": "Sièges avant", "de": "Vordersitze", - "nl": "Voorstoelen" + "nl": "Voorstoelen", + "it": "Sedili anteriori" }, "front-undercarriage": { "key": "front-undercarriage", "en": "Front Undercarriage", "fr": "Châssis avant", "de": "Vorderes Fahrwerk", - "nl": "Voorzijde onderstel" + "nl": "Voorzijde onderstel", + "it": "Sottoscocca anteriore" }, "front-wheel-left": { "key": "front-wheel-left", "en": "Front Wheel Left", "fr": "Roue avant gauche", "de": "Vorderrad links", - "nl": "Voorwiel links" + "nl": "Voorwiel links", + "it": "Ruota anteriore sinistra" }, "front-wheel-right": { "key": "front-wheel-right", "en": "Front Wheel Right", "fr": "Roue avant droite", "de": "Rechtes Vorderrad", - "nl": "Voorwiel rechts" + "nl": "Voorwiel rechts", + "it": "Ruota anteriore destra" }, "hood": { "key": "hood", "en": "Hood", "fr": "Capot", "de": "Abdeckhaube", - "nl": "Motorkap" + "nl": "Motorkap", + "it": "Cofano" }, "hood-windshield": { "key": "hood-windshield", "en": "Hood / Windshield", "fr": "Capot / pare-brise", "de": "Motorhaube / Windschutzscheibe", - "nl": "Motorkap / voorruit" + "nl": "Motorkap / voorruit", + "it": "Cofano / parabrezza" }, "interior-roof": { "key": "interior-roof", "en": "Interior Roof", "fr": "Pavillon intérieur", "de": "Innen Dach", - "nl": "Interieur dak" + "nl": "Interieur dak", + "it": "Tetto interno" }, "lateral-full-left": { "key": "lateral-full-left", "en": "Full Left", "fr": "Gauche vue complète", "de": "Vollständig links", - "nl": "Volledig links" + "nl": "Volledig links", + "it": "Completamente a sinistra" }, "lateral-full-right": { "key": "lateral-full-right", "en": "Full Right", "fr": "Droite vue complète", "de": "Volles Recht", - "nl": "Volledig rechts" + "nl": "Volledig rechts", + "it": "Completamente a destra" }, "lateral-left": { "key": "lateral-left", "en": "Lateral Left", "fr": "Latéral gauche", "de": "Linke Seite", - "nl": "Zijwaarts links" + "nl": "Zijwaarts links", + "it": "Laterale sinistra" }, "lateral-low-left": { "key": "lateral-low-left", "en": "Lateral Low Left", "fr": "Latéral gauche - vue basse", "de": "Seitlich tief links", - "nl": "Zijwaarts laag links" + "nl": "Zijwaarts laag links", + "it": "Laterale bassa sinistra" }, "lateral-low-right": { "key": "lateral-low-right", "en": "Lateral Low Right", "fr": "Latéral droite - vue basse", "de": "Seitlich Niedrig Rechts", - "nl": "Zijwaarts laag rechts" + "nl": "Zijwaarts laag rechts", + "it": "Laterale bassa destra" }, "left-front-door": { "key": "left-front-door", "en": "Left Front Door", "fr": "Porte avant gauche", "de": "Tür vorne links", - "nl": "Linker voordeur" + "nl": "Linker voordeur", + "it": "Porta anteriore sinistra" }, "open-trunk": { "key": "open-trunk", "en": "Open Trunk", "fr": "Coffre ouvert", "de": "Offene Truhe", - "nl": "Opengeklapte koffer" + "nl": "Opengeklapte koffer", + "it": "Bagagliaio aperto" }, "rear": { "key": "rear", "en": "Rear", "fr": "Arrière", "de": "Hinten", - "nl": "Achterkant" + "nl": "Achterkant", + "it": "Parte posteriore" }, "rear-bumper-side-left": { "key": "rear-bumper-side-left", "en": "Rear Bumper Side Left", "fr": "Pare-chocs arrière gauche", "de": "Stoßstange hinten links", - "nl": "Achterbumper links" + "nl": "Achterbumper links", + "it": "Posteriore lato sinistro" }, "rear-bumper-side-right": { "key": "rear-bumper-side-right", "en": "Rear Bumper Side Right", "fr": "Pare-chocs arrière droite", "de": "Stoßstange hinten rechts", - "nl": "Achterbumper rechts" + "nl": "Achterbumper rechts", + "it": "Posteriore lato destro" }, "rear-door-left": { "key": "rear-door-left", "en": "Rear Door Left", "fr": "Portière arrière gauche", "de": "Tür hinten links", - "nl": "Achterdeur links" + "nl": "Achterdeur links", + "it": "Porta posteriore sinistra" }, "rear-door-right": { "key": "rear-door-right", "en": "Rear Door Right", "fr": "Portière arrière droite", "de": "Tür hinten rechts", - "nl": "Achterdeur rechts" + "nl": "Achterdeur rechts", + "it": "Porta posteriore destra" }, "rear-fender-left": { "key": "rear-fender-left", "en": "Rear Fender Left", "fr": "Aile arrière gauche", "de": "Kotflügel hinten links", - "nl": "Achterkant spatbord links" + "nl": "Achterkant spatbord links", + "it": "Parafango posteriore sinistro" }, "rear-fender-right": { "key": "rear-fender-right", "en": "Rear Fender Right", "fr": "Aile arrière droite", "de": "Kotflügel hinten rechts", - "nl": "Achterkant spatbord rechts" + "nl": "Achterkant spatbord rechts", + "it": "Parafango posteriore destro" }, "rear-lateral-full-left": { "key": "rear-lateral-full-left", "en": "Rear Full Left", "fr": "Arrière gauche - vue complète", "de": "Hinten ganz links", - "nl": "Achterkant volledig links" + "nl": "Achterkant volledig links", + "it": "Posteriore completamente a sinistra" }, "rear-lateral-full-right": { "key": "rear-lateral-full-right", "en": "Rear Full Right", "fr": "Arrière droite - vue complète", "de": "Hinten ganz rechts", - "nl": "Achterkant volledig rechts" + "nl": "Achterkant volledig rechts", + "it": "Posteriore completamente a destra" }, "rear-lateral-left": { "key": "rear-lateral-left", "en": "Rear Lateral Left", "fr": "Arrière latéral gauche", "de": "Hinten seitlich links", - "nl": "Achterkant zijwaarts links" + "nl": "Achterkant zijwaarts links", + "it": "Posteriore laterale sinistra" }, "rear-lateral-low-left": { "key": "rear-lateral-low-left", "en": "Rear Lateral Low Left", "fr": "Arrière latéral gauche - vue basse", "de": "Hinten Seitlich Niedrig Links", - "nl": "Achterkant zijwaarts laag links" + "nl": "Achterkant zijwaarts laag links", + "it": "Posteriore laterale bassa sinistra" }, "rear-lateral-low-right": { "key": "rear-lateral-low-right", "en": "Rear Lateral Low Right", "fr": "Arrière latéral droite - vue basse", "de": "Hinten Seitlich Niedrig Rechts", - "nl": "Achterkant zijwaarts laag rechts" + "nl": "Achterkant zijwaarts laag rechts", + "it": "Posteriore laterale bassa destra" }, "rear-lateral-right": { "key": "rear-lateral-right", "en": "Rear Lateral Right", "fr": "Arrière latéral droite", "de": "Hinten seitlich rechts", - "nl": "Achterkant zijwaarts rechts" + "nl": "Achterkant zijwaarts rechts", + "it": "Posteriore laterale destra" }, "rear-left": { "key": "rear-left", "en": "Rear Left", "fr": "Arrière gauche", "de": "Hinten links", - "nl": "Achterkant links" + "nl": "Achterkant links", + "it": "Parte posteriore sinistra" }, "rear-low": { "key": "rear-low", "en": "Rear Low", "fr": "Arrière - vue basse", "de": "Hinten Niedrig", - "nl": "Achterkant laag" + "nl": "Achterkant laag", + "it": "Parte posteriore bassa" }, "rear-right": { "key": "rear-right", "en": "Rear Right", "fr": "Arrière droite", "de": "Hinten rechts", - "nl": "Achterkant rechts" + "nl": "Achterkant rechts", + "it": "Parte posteriore destra" }, "rear-roof": { "key": "rear-roof", "en": "Rear Roof", "fr": "Toit Arrière", "de": "Hinteres Dach", - "nl": "Achterkant dak" + "nl": "Achterkant dak", + "it": "Tetto posteriore" }, "rear-roof-right": { "key": "rear-roof-right", "en": "Rear Roof Right", "fr": "Toit arrière droite", "de": "Hinteres Dach rechts", - "nl": "Achterkant dak rechts" + "nl": "Achterkant dak rechts", + "it": "Tetto posteriore destro" }, "rear-seats": { "key": "rear-seats", "en": "Rear Seats", "fr": "Sièges arrière", "de": "Rücksitze", - "nl": "Achterbank" + "nl": "Achterbank", + "it": "Sedili posteriori" }, "rear-up-left": { "key": "rear-up-left", "en": "Rear Up Left", "fr": "Arrière gauche - vue haute", "de": "Hinten oben links", - "nl": "Achterkant omhoog links" + "nl": "Achterkant omhoog links", + "it": "Posteriore in alto a sinistra" }, "rear-up-right": { "key": "rear-up-right", "en": "Rear Up Right", "fr": "Arrière droite - vue haute", "de": "Hinten oben rechts", - "nl": "Achterkant omhoog rechts" + "nl": "Achterkant omhoog rechts", + "it": "Posteriore in alto a destra" }, "rear-wheel-left": { "key": "rear-wheel-left", "en": "Rear Wheel Left", "fr": "Roue arrière gauche", "de": "Linkes Hinterrad", - "nl": "Achterwiel links" + "nl": "Achterwiel links", + "it": "Ruota posteriore sinistra" }, "rear-wheel-right": { "key": "rear-wheel-right", "en": "Rear Wheel Right", "fr": "Roue arrière droite", "de": "Linkes Hinterrad", - "nl": "Achterwiel rechts" + "nl": "Achterwiel rechts", + "it": "Ruota posteriore destra" }, "rear-zoomed": { "key": "rear-zoomed", "en": "Rear Zoomed", "fr": "Arrière zoomé", "de": "Gezoomter Hinterkopf", - "nl": "Achterkant ingezoomd" + "nl": "Achterkant ingezoomd", + "it": "Parte posteriore zoomata" }, "rocker-panel-left": { "key": "rocker-panel-left", "en": "Rocker Panel Left", "fr": "Bas de caisse gauche", "de": "Schwellerverkleidung links", - "nl": "Drempelpaneel links" + "nl": "Drempelpaneel links", + "it": "Pannello laterale sinistro" }, "rocker-panel-rear-left": { "key": "rocker-panel-rear-left", "en": "Rocker Panel Rear Left", "fr": "Bas de caisse arrière gauche", "de": "Schwellerverkleidung hinten links", - "nl": "Achterste drempelpaneel links" + "nl": "Achterste drempelpaneel links", + "it": "Pannello laterale posteriore sinistro" }, "rocker-panel-right": { "key": "rocker-panel-right", "en": "Rocker Panel Right", "fr": "Bas de caisse droite", "de": "Schwellerverkleidung rechts", - "nl": "Drempelpaneel rechts" + "nl": "Drempelpaneel rechts", + "it": "Pannello laterale destro" }, "rocker-panel-rear-right": { "key": "rocker-panel-rear-right", "en": "Rocker Panel Rear Right", "fr": "Bas de caisse arrière droite", "de": "Schwellerverkleidung hinten rechts", - "nl": "Achterste drempelpaneel rechts" + "nl": "Achterste drempelpaneel rechts", + "it": "Pannello laterale posteriore destro" }, "trunk": { "key": "trunk", "en": "Trunk", "fr": "Coffre", "de": "Kofferraum", - "nl": "Kofferbak" + "nl": "Kofferbak", + "it": "Bagagliaio" }, "trunk-left-side": { "key": "trunk-left-side", "en": "Trunk Left Side", "fr": "Coffre gauche", "de": "Kofferraum Linke Seite", - "nl": "Linkerkant kofferbak" + "nl": "Linkerkant kofferbak", + "it": "Lato sinistro del bagagliaio" }, "trunk-right-side": { "key": "trunk-right-side", "en": "Trunk Right Side", "fr": "Coffre droite", "de": "Kofferraum Rechte Seite", - "nl": "Rechterkant kofferbak" + "nl": "Rechterkant kofferbak", + "it": "Lato destro del bagagliaio" }, "vin": { "key": "vin", "en": "VIN", "fr": "VIN", "de": "VIN", - "nl": "VIN" + "nl": "VIN", + "it": "VIN" }, "windshield": { "key": "windshield", "en": "Windshield", "fr": "Pare-brise", "de": "Windschutzscheibe", - "nl": "Voorruit" + "nl": "Voorruit", + "it": "Parabrezza" }, "hatchback": { "key": "hatchback", "en": "Hatchback", "fr": "Compacte", "de": "Schrägheck", - "nl": "Hatchback" + "nl": "Hatchback", + "it": "Hatchback" }, "cuv": { "key": "cuv", "en": "CUV", "fr": "CUV", "de": "CUV", - "nl": "CUV" + "nl": "CUV", + "it": "CUV" }, "pickup": { "key": "pickup", "en": "Pickup", "fr": "Pickup", "de": "Pickup", - "nl": "Pickup" + "nl": "Pickup", + "it": "Pickup" }, "city": { "key": "city", "en": "City", "fr": "Citadine", "de": "Stadtauto", - "nl": "Stadswagen" + "nl": "Stadswagen", + "it": "Città" }, "van": { "key": "van", "en": "Van", "fr": "Utilitaire", "de": "Van", - "nl": "Bestelwagen" + "nl": "Bestelwagen", + "it": "Furgone" }, "sedan": { "key": "sedan", "en": "Sedan", "fr": "Berline", "de": "Limousine", - "nl": "Sedan" + "nl": "Sedan", + "it": "Berlina" }, "large-suv": { "key": "large-suv", "en": "Large SUV", "fr": "Grand SUV", "de": "Großen Geländewagen", - "nl": "Grote SUV" + "nl": "Grote SUV", + "it": "Grande SUV" }, "minivan": { "key": "minivan", "en": "Minivan", "fr": "Monospace", "de": "Minivan", - "nl": "Minivan" + "nl": "Minivan", + "it": "Monovolume" }, "suv": { "key": "suv", "en": "SUV", "fr": "SUV", "de": "Geländewagen", - "nl": "SUV" + "nl": "SUV", + "it": "SUV" }, "hgv": { "key": "hgv", "en": "HGV", "fr": "HGV", "de": "HGV", - "nl": "HGV" + "nl": "HGV", + "it": "HGV" }, "front-left-tire": { "key": "front-left-tire", "en": "Front left tire", "fr": "Pneu avant gauche", "de": "Vorderer linker Reifen", - "nl": "Voorband links" + "nl": "Voorband links", + "it": "Pneus avant gauche" }, "front-right-tire": { "key": "front-right-tire", "en": "Front right tire", "fr": "Pneu avant droit", "de": "Vorderer rechter Reifen", - "nl": "Voorband rechts" + "nl": "Voorband rechts", + "it": "Pneus avant droit" }, "rear-left-tire": { "key": "rear-left-tire", "en": "Rear left tire", "fr": "Pneu arrière gauche", "de": "Hinterer linker Reifen", - "nl": "Achterband links" + "nl": "Achterband links", + "it": "Pneus arrière gauche" }, "rear-right-tire": { "key": "rear-right-tire", "en": "Rear right tire", "fr": "Pneu arrière droit", "de": "Hinterer rechter Reifen", - "nl": "Achterband rechts" + "nl": "Achterband rechts", + "it": "Pneus arrière droit" }, "dashboard-screen": { "key": "dashboard-screen", "en": "Dashboard Screen", "fr": "Écran de tableau de bord", "de": "Armaturenbrett Bildschirm", - "nl": "Dashboard scherm" + "nl": "Dashboard scherm", + "it": "Schermo del cruscotto" }, "keys": { "key": "keys", "en": "Keys", "fr": "Clés", "de": "Tasten", - "nl": "Sleutels" + "nl": "Sleutels", + "it": "Chiavi" }, "card-keys": { "key": "card-keys", "en": "Card Keys", "fr": "Cartes-clés", "de": "Kartenschlüssel", - "nl": "Kaartsleutels" + "nl": "Kaartsleutels", + "it": "Chiavi a scheda" }, "front-left-penny-test": { "key": "front-left-penny-test", "en": "Front left Penny Test", "fr": "Test de Penny avant gauche", "de": "Penny-Test vorne links", - "nl": "Penny Test vooraan links" + "nl": "Penny Test vooraan links", + "it": "Test di Penny anteriore sinistra" }, "front-right-penny-test": { "key": "front-right-penny-test", "en": "Front right Penny Test", "fr": "Test de Penny avant droit", "de": "Penny-Test vorne rechts", - "nl": "Penny Test vooraan rechts" + "nl": "Penny Test vooraan rechts", + "it": "Test di Penny anteriore destra" }, "rear-left-penny-test": { "key": "rear-left-penny-test", "en": "Rear left Penny Test", "fr": "Test de Penny arrière gauche", "de": "Penny-Test hinten links", - "nl": "Penny Test achteraan links" + "nl": "Penny Test achteraan links", + "it": "Test di Penny posteriore sinistra" }, "rear-right-penny-test": { "key": "rear-right-penny-test", "en": "Rear right Penny Test", "fr": "Test de Penny arrière droit", "de": "Penny-Test hinten rechts", - "nl": "Penny Test achteraan rechts" + "nl": "Penny Test achteraan rechts", + "it": "Test di Penny posteriore destra" } } diff --git a/packages/sights/research/schemas/labels.schema.json b/packages/sights/research/schemas/labels.schema.json index bd67760a3..b86db5972 100644 --- a/packages/sights/research/schemas/labels.schema.json +++ b/packages/sights/research/schemas/labels.schema.json @@ -24,9 +24,12 @@ }, "nl": { "type": "string" + }, + "it": { + "type": "string" } }, - "required": ["key", "en", "fr", "de", "nl"], + "required": ["key", "en", "fr", "de", "nl", "it"], "unevaluatedProperties": false } }, diff --git a/packages/sights/src/build/buildJSONs.ts b/packages/sights/src/build/buildJSONs.ts index 614c8ac01..44a59adf0 100644 --- a/packages/sights/src/build/buildJSONs.ts +++ b/packages/sights/src/build/buildJSONs.ts @@ -26,6 +26,7 @@ function mapLabels(labels: LabelDictionary): LabelDictionary { en: labelTranslation.en, de: labelTranslation.de, nl: labelTranslation.nl, + it: labelTranslation.it, }, }), {}, diff --git a/packages/types/src/i18n.ts b/packages/types/src/i18n.ts index 17a497b3a..3f6734203 100644 --- a/packages/types/src/i18n.ts +++ b/packages/types/src/i18n.ts @@ -1,7 +1,7 @@ /** * An array containing Monk available languages. */ -export const monkLanguages = ['fr', 'en', 'de', 'nl'] as const; +export const monkLanguages = ['fr', 'en', 'de', 'nl', 'it'] as const; /** * Represents a Monk language type, which is one of the available Monk languages.