From 3739c88e932898de93eebc5d0c828956968e83af Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 26 Aug 2025 18:12:09 +1000 Subject: [PATCH 01/40] New Crowdin updates (#688) * New translations app_en.arb (Polish) * New translations app_en.arb (German) * New translations app_en.arb (Hungarian) * New translations app_en.arb (Italian) * New translations app_en.arb (Czech) * New translations app_en.arb (Portuguese, Brazilian) * New translations app_en.arb (Ukrainian) * New translations app_en.arb (Swedish) * New translations app_en.arb (Thai) * New translations app_en.arb (Estonian) * New translations app_en.arb (Romanian) * New translations app_en.arb (French) * New translations app_en.arb (Spanish) * New translations app_en.arb (Arabic) * New translations app_en.arb (Bulgarian) * New translations app_en.arb (Danish) * New translations app_en.arb (Greek) * New translations app_en.arb (Finnish) * New translations app_en.arb (Hebrew) * New translations app_en.arb (Japanese) * New translations app_en.arb (Korean) * New translations app_en.arb (Lithuanian) * New translations app_en.arb (Dutch) * New translations app_en.arb (Norwegian) * New translations app_en.arb (Portuguese) * New translations app_en.arb (Russian) * New translations app_en.arb (Slovak) * New translations app_en.arb (Slovenian) * New translations app_en.arb (Turkish) * New translations app_en.arb (Chinese Simplified) * New translations app_en.arb (Chinese Traditional) * New translations app_en.arb (Vietnamese) * New translations app_en.arb (Indonesian) * New translations app_en.arb (Persian) * New translations app_en.arb (Spanish, Mexico) * New translations app_en.arb (Latvian) * New translations app_en.arb (Hindi) * New translations app_en.arb (Serbian (Latin)) * New translations app_en.arb (Portuguese) * New translations app_en.arb (Portuguese, Brazilian) * New translations app_en.arb (Dutch) * New translations app_en.arb (Spanish) * New translations app_en.arb (French) * New translations app_en.arb (Chinese Simplified) --- lib/l10n/ar_SA/app_ar_SA.arb | 4 ++ lib/l10n/bg_BG/app_bg_BG.arb | 4 ++ lib/l10n/cs_CZ/app_cs_CZ.arb | 4 ++ lib/l10n/da_DK/app_da_DK.arb | 4 ++ lib/l10n/de_DE/app_de_DE.arb | 4 ++ lib/l10n/el_GR/app_el_GR.arb | 4 ++ lib/l10n/es_ES/app_es_ES.arb | 4 ++ lib/l10n/es_MX/app_es_MX.arb | 4 ++ lib/l10n/et_EE/app_et_EE.arb | 4 ++ lib/l10n/fa_IR/app_fa_IR.arb | 4 ++ lib/l10n/fi_FI/app_fi_FI.arb | 4 ++ lib/l10n/fr_FR/app_fr_FR.arb | 34 ++++++----- lib/l10n/he_IL/app_he_IL.arb | 4 ++ lib/l10n/hi_IN/app_hi_IN.arb | 4 ++ lib/l10n/hu_HU/app_hu_HU.arb | 4 ++ lib/l10n/id_ID/app_id_ID.arb | 4 ++ lib/l10n/it_IT/app_it_IT.arb | 4 ++ lib/l10n/ja_JP/app_ja_JP.arb | 4 ++ lib/l10n/ko_KR/app_ko_KR.arb | 4 ++ lib/l10n/lt_LT/app_lt_LT.arb | 4 ++ lib/l10n/lv_LV/app_lv_LV.arb | 4 ++ lib/l10n/nl_NL/app_nl_NL.arb | 30 ++++++---- lib/l10n/no_NO/app_no_NO.arb | 4 ++ lib/l10n/pl_PL/app_pl_PL.arb | 4 ++ lib/l10n/pt_BR/app_pt_BR.arb | 4 ++ lib/l10n/pt_PT/app_pt_PT.arb | 112 ++++++++++++++++++----------------- lib/l10n/ro_RO/app_ro_RO.arb | 4 ++ lib/l10n/ru_RU/app_ru_RU.arb | 4 ++ lib/l10n/sk_SK/app_sk_SK.arb | 4 ++ lib/l10n/sl_SI/app_sl_SI.arb | 4 ++ lib/l10n/sr_CS/app_sr_CS.arb | 4 ++ lib/l10n/sv_SE/app_sv_SE.arb | 4 ++ lib/l10n/th_TH/app_th_TH.arb | 4 ++ lib/l10n/tr_TR/app_tr_TR.arb | 4 ++ lib/l10n/uk_UA/app_uk_UA.arb | 4 ++ lib/l10n/vi_VN/app_vi_VN.arb | 4 ++ lib/l10n/zh_CN/app_zh_CN.arb | 6 +- lib/l10n/zh_TW/app_zh_TW.arb | 4 ++ 38 files changed, 235 insertions(+), 83 deletions(-) diff --git a/lib/l10n/ar_SA/app_ar_SA.arb b/lib/l10n/ar_SA/app_ar_SA.arb index ae54712a..b66d8f88 100644 --- a/lib/l10n/ar_SA/app_ar_SA.arb +++ b/lib/l10n/ar_SA/app_ar_SA.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Companies", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Completion Date", "@completionDate": {}, "configureServer": "Configure server settings", diff --git a/lib/l10n/bg_BG/app_bg_BG.arb b/lib/l10n/bg_BG/app_bg_BG.arb index 94f4a3c0..26b3b50e 100644 --- a/lib/l10n/bg_BG/app_bg_BG.arb +++ b/lib/l10n/bg_BG/app_bg_BG.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Companies", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Completion Date", "@completionDate": {}, "configureServer": "Configure server settings", diff --git a/lib/l10n/cs_CZ/app_cs_CZ.arb b/lib/l10n/cs_CZ/app_cs_CZ.arb index a651f027..3258bc77 100644 --- a/lib/l10n/cs_CZ/app_cs_CZ.arb +++ b/lib/l10n/cs_CZ/app_cs_CZ.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Společnosti", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Datum dokončení", "@completionDate": {}, "configureServer": "Konfigurace nastavení serveru", diff --git a/lib/l10n/da_DK/app_da_DK.arb b/lib/l10n/da_DK/app_da_DK.arb index ee25a226..9f583987 100644 --- a/lib/l10n/da_DK/app_da_DK.arb +++ b/lib/l10n/da_DK/app_da_DK.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Companies", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Completion Date", "@completionDate": {}, "configureServer": "Configure server settings", diff --git a/lib/l10n/de_DE/app_de_DE.arb b/lib/l10n/de_DE/app_de_DE.arb index 0a885a0d..319e8883 100644 --- a/lib/l10n/de_DE/app_de_DE.arb +++ b/lib/l10n/de_DE/app_de_DE.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Firmen", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Abgeschlossen am", "@completionDate": {}, "configureServer": "Server-Einstellungen konfigurieren", diff --git a/lib/l10n/el_GR/app_el_GR.arb b/lib/l10n/el_GR/app_el_GR.arb index f06a9603..7decd92e 100644 --- a/lib/l10n/el_GR/app_el_GR.arb +++ b/lib/l10n/el_GR/app_el_GR.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Companies", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Completion Date", "@completionDate": {}, "configureServer": "Configure server settings", diff --git a/lib/l10n/es_ES/app_es_ES.arb b/lib/l10n/es_ES/app_es_ES.arb index 102ee6f2..db35685e 100644 --- a/lib/l10n/es_ES/app_es_ES.arb +++ b/lib/l10n/es_ES/app_es_ES.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Empresas", "@companies": {}, + "complete": "Completado", + "@complete": {}, + "completeOrder": "Completar Pedido", + "@completeOrder": {}, "completionDate": "Fecha de Finalización", "@completionDate": {}, "configureServer": "Configure las opciones de su servidor", diff --git a/lib/l10n/es_MX/app_es_MX.arb b/lib/l10n/es_MX/app_es_MX.arb index 8efb8a76..0b06fc28 100644 --- a/lib/l10n/es_MX/app_es_MX.arb +++ b/lib/l10n/es_MX/app_es_MX.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Empresas", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Fecha de finalización", "@completionDate": {}, "configureServer": "Configurar ajustes del servidor", diff --git a/lib/l10n/et_EE/app_et_EE.arb b/lib/l10n/et_EE/app_et_EE.arb index 0449a7f6..83ed8750 100644 --- a/lib/l10n/et_EE/app_et_EE.arb +++ b/lib/l10n/et_EE/app_et_EE.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Ettevõtted", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Completion Date", "@completionDate": {}, "configureServer": "Seadista serveri seadeid", diff --git a/lib/l10n/fa_IR/app_fa_IR.arb b/lib/l10n/fa_IR/app_fa_IR.arb index d14c414e..c0ac3e46 100644 --- a/lib/l10n/fa_IR/app_fa_IR.arb +++ b/lib/l10n/fa_IR/app_fa_IR.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "شرکت‌ها", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "تاریخ تکمیل", "@completionDate": {}, "configureServer": "تنظیم شمخصات سرور", diff --git a/lib/l10n/fi_FI/app_fi_FI.arb b/lib/l10n/fi_FI/app_fi_FI.arb index 2f06b860..cc6cf50f 100644 --- a/lib/l10n/fi_FI/app_fi_FI.arb +++ b/lib/l10n/fi_FI/app_fi_FI.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Yritykset", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Completion Date", "@completionDate": {}, "configureServer": "Määritä palvelimen asetukset", diff --git a/lib/l10n/fr_FR/app_fr_FR.arb b/lib/l10n/fr_FR/app_fr_FR.arb index aa6d9f23..1c71f6e0 100644 --- a/lib/l10n/fr_FR/app_fr_FR.arb +++ b/lib/l10n/fr_FR/app_fr_FR.arb @@ -42,7 +42,7 @@ "@aspectRatio3x2": {}, "aspectRatio4x3": "4:3", "@aspectRatio4x3": {}, - "aspectRatioSquare": "Square (1:1)", + "aspectRatioSquare": "Carré (1:1)", "@aspectRatioSquare": {}, "allocateStock": "Allouer un stock", "@allocateStock": {}, @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Sociétés", "@companies": {}, + "complete": "Terminé", + "@complete": {}, + "completeOrder": "Finir l'achat", + "@completeOrder": {}, "completionDate": "Date d'achèvement", "@completionDate": {}, "configureServer": "Configurer les paramètres serveur", @@ -198,9 +202,9 @@ }, "credits": "Crédits", "@credits": {}, - "crop": "Crop", + "crop": "Rogner", "@crop": {}, - "cropImage": "Crop Image", + "cropImage": "Rogner l'image", "@cropImage": {}, "customer": "Client", "@customer": {}, @@ -240,9 +244,9 @@ }, "documentation": "Documentation", "@documentation": {}, - "downloadComplete": "Download Complete", + "downloadComplete": "Téléchargement terminé", "@downloadComplete": {}, - "downloadError": "Error downloading image", + "downloadError": "Impossible de télécharger l'image", "@downloadError": {}, "downloading": "Téléchargement du fichier", "@downloading": {}, @@ -302,9 +306,9 @@ "@expiryExpired": {}, "expiryStale": "Périmé", "@expiryStale": {}, - "extraLineItem": "Extra Line Item", + "extraLineItem": "Ligne supplémentaire", "@extraLineItem": {}, - "extraLineItems": "Extra Line Items", + "extraLineItems": "Lignes supplémentaires", "@extraLineItems": {}, "feedback": "Donner votre avis", "@feedback": {}, @@ -530,7 +534,7 @@ "@noResponse": {}, "noResults": "Aucun résultat", "@noResults": {}, - "noImageAvailable": "No image available", + "noImageAvailable": "Pas d'image disponible", "@noImageAvailable": {}, "noSubcategories": "Pas de sous-catégorie", "@noSubcategories": {}, @@ -628,7 +632,7 @@ "@permissionAccountDenied": {}, "permissionRequired": "Autorisation requise", "@permissionRequired": {}, - "phone": "Phone", + "phone": "Téléphone", "@phone": {}, "printLabel": "Imprimer l'étiquette", "@printLabel": {}, @@ -724,7 +728,7 @@ "@reference": {}, "refresh": "Actualiser", "@refresh": {}, - "rotateClockwise": "Rotate 90° clockwise", + "rotateClockwise": "Rotation à 90° dans le sens horaire", "@rotateClockwise": {}, "refreshing": "Actualisation en cours", "@refreshing": {}, @@ -1084,7 +1088,7 @@ "@uploadFailed": {}, "uploadSuccess": "Fichier transféré", "@uploadSuccess": {}, - "uploadImage": "Upload Image", + "uploadImage": "Envoyer une image", "@uploadImage": {}, "usedIn": "Utilisé dans", "@usedIn": {}, @@ -1132,7 +1136,7 @@ "@variantCost": {}, "overallPricing": "Cout Global", "@overallPricing": {}, - "pricingOverrides": "Pricing Overrides", + "pricingOverrides": "Remplacement des prix", "@pricingOverrides": {}, "currency": "Devise", "@currency": {}, @@ -1142,10 +1146,10 @@ "@noPricingAvailable": {}, "noPricingDataFound": "Aucune donnée de tarification disponible pour cette pièce", "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", + "deleteImageConfirmation": "Êtes-vous sûr de vouloir supprimer cette image ?", "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", + "deleteImageTooltip": "Supprimer l'image", "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", + "deleteImage": "Supprimer l'image", "@deleteImage": {} } \ No newline at end of file diff --git a/lib/l10n/he_IL/app_he_IL.arb b/lib/l10n/he_IL/app_he_IL.arb index 26e9ff17..b7ca5b3e 100644 --- a/lib/l10n/he_IL/app_he_IL.arb +++ b/lib/l10n/he_IL/app_he_IL.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "חברות", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Completion Date", "@completionDate": {}, "configureServer": "קבע את הגדרות השרת", diff --git a/lib/l10n/hi_IN/app_hi_IN.arb b/lib/l10n/hi_IN/app_hi_IN.arb index b30109de..5d4fb5bf 100644 --- a/lib/l10n/hi_IN/app_hi_IN.arb +++ b/lib/l10n/hi_IN/app_hi_IN.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Companies", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Completion Date", "@completionDate": {}, "configureServer": "Configure server settings", diff --git a/lib/l10n/hu_HU/app_hu_HU.arb b/lib/l10n/hu_HU/app_hu_HU.arb index 626d4e3c..8b36a563 100644 --- a/lib/l10n/hu_HU/app_hu_HU.arb +++ b/lib/l10n/hu_HU/app_hu_HU.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Cégek", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Befejezés dátuma", "@completionDate": {}, "configureServer": "Kiszolgáló beállítások konfigurálása", diff --git a/lib/l10n/id_ID/app_id_ID.arb b/lib/l10n/id_ID/app_id_ID.arb index 84fda02d..db93ff0c 100644 --- a/lib/l10n/id_ID/app_id_ID.arb +++ b/lib/l10n/id_ID/app_id_ID.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Perusahaan", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Completion Date", "@completionDate": {}, "configureServer": "Konfigurasikan pengaturan server", diff --git a/lib/l10n/it_IT/app_it_IT.arb b/lib/l10n/it_IT/app_it_IT.arb index 4e47bfd7..f918e7ad 100644 --- a/lib/l10n/it_IT/app_it_IT.arb +++ b/lib/l10n/it_IT/app_it_IT.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Aziende", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Data di completamento", "@completionDate": {}, "configureServer": "Configurare le impostazioni del server", diff --git a/lib/l10n/ja_JP/app_ja_JP.arb b/lib/l10n/ja_JP/app_ja_JP.arb index e2b90f7f..73b17325 100644 --- a/lib/l10n/ja_JP/app_ja_JP.arb +++ b/lib/l10n/ja_JP/app_ja_JP.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "会社", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "完了日", "@completionDate": {}, "configureServer": "サーバー設定", diff --git a/lib/l10n/ko_KR/app_ko_KR.arb b/lib/l10n/ko_KR/app_ko_KR.arb index 85b8106b..0b93e85e 100644 --- a/lib/l10n/ko_KR/app_ko_KR.arb +++ b/lib/l10n/ko_KR/app_ko_KR.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Companies", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Completion Date", "@completionDate": {}, "configureServer": "Configure server settings", diff --git a/lib/l10n/lt_LT/app_lt_LT.arb b/lib/l10n/lt_LT/app_lt_LT.arb index ceff3160..202a20eb 100644 --- a/lib/l10n/lt_LT/app_lt_LT.arb +++ b/lib/l10n/lt_LT/app_lt_LT.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Companies", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Completion Date", "@completionDate": {}, "configureServer": "Configure server settings", diff --git a/lib/l10n/lv_LV/app_lv_LV.arb b/lib/l10n/lv_LV/app_lv_LV.arb index 2f2a3c0f..c65369a4 100644 --- a/lib/l10n/lv_LV/app_lv_LV.arb +++ b/lib/l10n/lv_LV/app_lv_LV.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Uzņēmumi", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Completion Date", "@completionDate": {}, "configureServer": "Configure server settings", diff --git a/lib/l10n/nl_NL/app_nl_NL.arb b/lib/l10n/nl_NL/app_nl_NL.arb index 0b0a76b7..b039e034 100644 --- a/lib/l10n/nl_NL/app_nl_NL.arb +++ b/lib/l10n/nl_NL/app_nl_NL.arb @@ -42,7 +42,7 @@ "@aspectRatio3x2": {}, "aspectRatio4x3": "4:3", "@aspectRatio4x3": {}, - "aspectRatioSquare": "Square (1:1)", + "aspectRatioSquare": "Vierkant (1:1)", "@aspectRatioSquare": {}, "allocateStock": "Voorraad Toewijzen", "@allocateStock": {}, @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Bedrijven", "@companies": {}, + "complete": "Gereed", + "@complete": {}, + "completeOrder": "Order Voltooien", + "@completeOrder": {}, "completionDate": "Datum van afronding", "@completionDate": {}, "configureServer": "Configureer server instellingen", @@ -198,9 +202,9 @@ }, "credits": "Credits", "@credits": {}, - "crop": "Crop", + "crop": "Bijsnijden", "@crop": {}, - "cropImage": "Crop Image", + "cropImage": "Afbeelding bijsnijden", "@cropImage": {}, "customer": "Klant", "@customer": {}, @@ -240,9 +244,9 @@ }, "documentation": "Documentatie", "@documentation": {}, - "downloadComplete": "Download Complete", + "downloadComplete": "Download voltooid", "@downloadComplete": {}, - "downloadError": "Error downloading image", + "downloadError": "Fout bij downloaden afbeelding", "@downloadError": {}, "downloading": "Bestand wordt gedownload", "@downloading": {}, @@ -268,7 +272,7 @@ "@editItem": {}, "editLineItem": "Voorraadartikel bewerken", "@editLineItem": {}, - "email": "Email", + "email": "E-mailadres", "@email": {}, "enterPassword": "Wachtwoord invoeren", "@enterPassword": {}, @@ -530,7 +534,7 @@ "@noResponse": {}, "noResults": "Geen Resultaten", "@noResults": {}, - "noImageAvailable": "No image available", + "noImageAvailable": "Geen afbeelding beschikbaar", "@noImageAvailable": {}, "noSubcategories": "Geen Subcategorieën", "@noSubcategories": {}, @@ -628,7 +632,7 @@ "@permissionAccountDenied": {}, "permissionRequired": "Toestemming Vereist", "@permissionRequired": {}, - "phone": "Phone", + "phone": "Telefoon", "@phone": {}, "printLabel": "Print Label", "@printLabel": {}, @@ -724,7 +728,7 @@ "@reference": {}, "refresh": "Vernieuwen", "@refresh": {}, - "rotateClockwise": "Rotate 90° clockwise", + "rotateClockwise": "90° rechtsom draaien", "@rotateClockwise": {}, "refreshing": "Verversen…", "@refreshing": {}, @@ -1084,7 +1088,7 @@ "@uploadFailed": {}, "uploadSuccess": "Bestand geüpload", "@uploadSuccess": {}, - "uploadImage": "Upload Image", + "uploadImage": "Afbeelding Uploaden", "@uploadImage": {}, "usedIn": "Wordt Gebruikt In", "@usedIn": {}, @@ -1142,10 +1146,10 @@ "@noPricingAvailable": {}, "noPricingDataFound": "Er zijn geen prijsgegevens gevonden voor dit deel", "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", + "deleteImageConfirmation": "Weet u zeker dat u deze afbeelding wilt verwijderen?", "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", + "deleteImageTooltip": "Afbeelding verwijderen", "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", + "deleteImage": "Afbeelding verwijderen", "@deleteImage": {} } \ No newline at end of file diff --git a/lib/l10n/no_NO/app_no_NO.arb b/lib/l10n/no_NO/app_no_NO.arb index 3bbb36cb..d454fd4c 100644 --- a/lib/l10n/no_NO/app_no_NO.arb +++ b/lib/l10n/no_NO/app_no_NO.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Firma", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Fullført dato", "@completionDate": {}, "configureServer": "Konfigurer serverinnstillinger", diff --git a/lib/l10n/pl_PL/app_pl_PL.arb b/lib/l10n/pl_PL/app_pl_PL.arb index 3bf7757e..68648a71 100644 --- a/lib/l10n/pl_PL/app_pl_PL.arb +++ b/lib/l10n/pl_PL/app_pl_PL.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Firmy", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Data ukończenia", "@completionDate": {}, "configureServer": "Konfiguruj ustawienia serwera", diff --git a/lib/l10n/pt_BR/app_pt_BR.arb b/lib/l10n/pt_BR/app_pt_BR.arb index 62bc7794..4d4cd098 100644 --- a/lib/l10n/pt_BR/app_pt_BR.arb +++ b/lib/l10n/pt_BR/app_pt_BR.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Empresas", "@companies": {}, + "complete": "Concluído", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Completion Date", "@completionDate": {}, "configureServer": "Definir as configurações do servidor", diff --git a/lib/l10n/pt_PT/app_pt_PT.arb b/lib/l10n/pt_PT/app_pt_PT.arb index 19f0b14b..4c9478bc 100644 --- a/lib/l10n/pt_PT/app_pt_PT.arb +++ b/lib/l10n/pt_PT/app_pt_PT.arb @@ -42,7 +42,7 @@ "@aspectRatio3x2": {}, "aspectRatio4x3": "4:3", "@aspectRatio4x3": {}, - "aspectRatioSquare": "Square (1:1)", + "aspectRatioSquare": "Quadrado (1:1)", "@aspectRatioSquare": {}, "allocateStock": "Alocar estoque", "@allocateStock": {}, @@ -52,9 +52,9 @@ "@appSettings": {}, "appSettingsDetails": "Configurar os parâmetros do InvenTree", "@appSettingsDetails": {}, - "assignedToMe": "Assigned to Me", + "assignedToMe": "Atribuído a Mim", "@assignedToMe": {}, - "assignedToMeDetail": "Show orders which are assigned to me", + "assignedToMeDetail": "Mostrar pedidos atribuídos a mim", "@assignedToMeDetail": {}, "attachments": "Anexos", "@attachments": {}, @@ -146,7 +146,7 @@ "@build": {}, "building": "Compilando", "@building": {}, - "cameraCreationError": "Could not open camera controller", + "cameraCreationError": "Não foi possível aceder ao controlo da câmara", "@cameraCreationError": {}, "cameraInternal": "Câmera Interna", "@cameraInternal": {}, @@ -168,7 +168,7 @@ "@categoryUpdated": {}, "company": "Empresa", "@company": {}, - "companyAdd": "Add Company", + "companyAdd": "Adicionar Empresa", "@companyAdd": {}, "companyEdit": "Editar empresa", "@companyEdit": {}, @@ -178,7 +178,11 @@ "@companyUpdated": {}, "companies": "Empresas", "@companies": {}, - "completionDate": "Completion Date", + "complete": "Finalizar", + "@complete": {}, + "completeOrder": "Finalizar Encomenda", + "@completeOrder": {}, + "completionDate": "Data de conclusão", "@completionDate": {}, "configureServer": "Configurar os parâmetros do servidor de email", "@configureServer": {}, @@ -198,9 +202,9 @@ }, "credits": "Créditos", "@credits": {}, - "crop": "Crop", + "crop": "Cortar", "@crop": {}, - "cropImage": "Crop Image", + "cropImage": "Recortar Imagem", "@cropImage": {}, "customer": "Cliente", "@customer": {}, @@ -210,9 +214,9 @@ "@customerReference": {}, "damaged": "Danificado", "@damaged": {}, - "colorScheme": "Color Scheme", + "colorScheme": "Esquema de cores", "@colorScheme": {}, - "colorSchemeDetail": "Select color scheme", + "colorSchemeDetail": "Seleccione o esquema de cores", "@colorSchemeDetail": {}, "darkMode": "Modo Noturno", "@darkMode": {}, @@ -230,7 +234,7 @@ "@deleteSuccess": {}, "description": "Descrição", "@description": {}, - "destination": "Destination", + "destination": "Destino", "@destination": {}, "destroyed": "Destruído", "@destroyed": {}, @@ -240,9 +244,9 @@ }, "documentation": "Documentação", "@documentation": {}, - "downloadComplete": "Download Complete", + "downloadComplete": "Transferência concluída", "@downloadComplete": {}, - "downloadError": "Error downloading image", + "downloadError": "Erro ao transferir imagem", "@downloadError": {}, "downloading": "Baixando arquivo", "@downloading": {}, @@ -250,7 +254,7 @@ "@edit": { "description": "edit" }, - "editAttachment": "Edit Attachment", + "editAttachment": "Editar Anexo", "@editAttachment": {}, "editCategory": "Editar categoria", "@editCategory": {}, @@ -296,15 +300,15 @@ "@errorReportUpload": {}, "errorReportUploadDetails": "Enviar relatórios de erros e registos anónimos", "@errorReportUploadDetails": {}, - "expiryDate": "Expiry Date", + "expiryDate": "Data de Validade", "@expiryDate": {}, - "expiryExpired": "Expired", + "expiryExpired": "Expirado", "@expiryExpired": {}, - "expiryStale": "Stale", + "expiryStale": "Inativo", "@expiryStale": {}, - "extraLineItem": "Extra Line Item", + "extraLineItem": "Adicionar Linha de Artigos Extra", "@extraLineItem": {}, - "extraLineItems": "Extra Line Items", + "extraLineItems": "Adicionar Linhas de Artigos Extra", "@extraLineItems": {}, "feedback": "Comentários", "@feedback": {}, @@ -426,59 +430,59 @@ "@invalidHostDetails": {}, "invalidPart": "Peça Inválida", "@invalidPart": {}, - "invalidPartCategory": "Invalid Part Category", + "invalidPartCategory": "Categoria de Peças Inválida", "@invalidPartCategory": {}, - "invalidStockLocation": "Invalid Stock Location", + "invalidStockLocation": "Localização de Estoque Inválida", "@invalidStockLocation": {}, - "invalidStockItem": "Invalid Stock Item", + "invalidStockItem": "Artigo de Estoque Inválido", "@invalidStockItem": {}, - "invalidSupplierPart": "Invalid Supplier Part", + "invalidSupplierPart": "Peça de fornecedor inválida", "@invalidSupplierPart": {}, - "invalidUsernamePassword": "Invalid username / password combination", + "invalidUsernamePassword": "O nome de utilizador ou a palavra-passe não estão corretos", "@invalidUsernamePassword": {}, - "issue": "Issue", + "issue": "Erro", "@issue": {}, - "issueDate": "Issue Date", + "issueDate": "Data de emissão", "@issueDate": {}, - "issueOrder": "Issue Order", + "issueOrder": "Emitir encomenda", "@issueOrder": {}, - "itemInLocation": "Item already in location", + "itemInLocation": "O artigo já está no local", "@itemInLocation": {}, - "itemDeleted": "Item has been removed", + "itemDeleted": "O artigo foi removido", "@itemDeleted": {}, - "itemUpdated": "Item updated", + "itemUpdated": "O artigo foi atualizado", "@itemUpdated": {}, - "keywords": "Keywords", + "keywords": "Palavras-chave", "@keywords": {}, - "labelPrinting": "Label Printing", + "labelPrinting": "Impressão de etiqueta", "@labelPrinting": {}, - "labelPrintingDetail": "Enable label printing", + "labelPrintingDetail": "Ativar impressão de etiquetas", "@labelPrintingDetail": {}, - "labelTemplate": "Label Template", + "labelTemplate": "Modelo de Etiqueta", "@labelTemplate": {}, - "labelSelectTemplate": "Select Label Template", + "labelSelectTemplate": "Selecione o modelo de etiqueta", "@labelSelectTemplate": {}, - "labelSelectPrinter": "Select Label Printer", + "labelSelectPrinter": "Selecionar impressora de etiqueta", "@labelSelectPrinter": {}, - "language": "Language", + "language": "Idioma", "@language": {}, - "languageDefault": "Default system language", + "languageDefault": "Idioma de sistema predefinido", "@languageDefault": {}, - "languageSelect": "Select Language", + "languageSelect": "Selecionar Idioma", "@languageSelect": {}, - "lastStocktake": "Last Stocktake", + "lastStocktake": "Último Balanço de Estoque", "@lastStocktake": {}, "lastUpdated": "Ultima atualização", "@lastUpdated": {}, - "level": "Level", + "level": "Nível", "@level": {}, - "lineItemAdd": "Add Line Item", + "lineItemAdd": "Adicionar linha", "@lineItemAdd": {}, - "lineItem": "Line Item", + "lineItem": "Linha", "@lineItem": {}, "lineItems": "Itens de linha", "@lineItems": {}, - "lineItemUpdated": "Line item updated", + "lineItemUpdated": "Linha atualizada", "@lineItemUpdated": {}, "locateItem": "Locate stock item", "@locateItem": {}, @@ -610,27 +614,27 @@ "@partCategory": {}, "partCategoryTopLevel": "Top level part category", "@partCategoryTopLevel": {}, - "partCategories": "Part Categories", + "partCategories": "Categorias de Peça", "@partCategories": {}, - "partDetails": "Part Details", + "partDetails": "Detalhes da Peça", "@partDetails": {}, - "partNotes": "Part Notes", + "partNotes": "Notas da Peça", "@partNotes": {}, - "partStock": "Part Stock", + "partStock": "Estoque da Peça", "@partStock": { "description": "part stock" }, - "password": "Password", + "password": "Palavra-passe", "@password": {}, - "passwordEmpty": "Password cannot be empty", + "passwordEmpty": "A palavra-passe não pode estar vazia", "@passwordEmpty": {}, - "permissionAccountDenied": "Your account does not have the required permissions to perform this action", + "permissionAccountDenied": "A sua conta não tem as permissões necessárias para executar esta ação", "@permissionAccountDenied": {}, - "permissionRequired": "Permission Required", + "permissionRequired": "Permissão necessária", "@permissionRequired": {}, - "phone": "Phone", + "phone": "Telefone", "@phone": {}, - "printLabel": "Print Label", + "printLabel": "Imprimir Etiqueta", "@printLabel": {}, "plugin": "Plugin", "@plugin": {}, diff --git a/lib/l10n/ro_RO/app_ro_RO.arb b/lib/l10n/ro_RO/app_ro_RO.arb index 3041b6d3..e3c54e95 100644 --- a/lib/l10n/ro_RO/app_ro_RO.arb +++ b/lib/l10n/ro_RO/app_ro_RO.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Companii", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Completion Date", "@completionDate": {}, "configureServer": "Configurare setări server", diff --git a/lib/l10n/ru_RU/app_ru_RU.arb b/lib/l10n/ru_RU/app_ru_RU.arb index 494c92c9..7437e273 100644 --- a/lib/l10n/ru_RU/app_ru_RU.arb +++ b/lib/l10n/ru_RU/app_ru_RU.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Компании", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Дата завершения", "@completionDate": {}, "configureServer": "Настройка параметров сервера", diff --git a/lib/l10n/sk_SK/app_sk_SK.arb b/lib/l10n/sk_SK/app_sk_SK.arb index 9ec2d50f..5e98aa32 100644 --- a/lib/l10n/sk_SK/app_sk_SK.arb +++ b/lib/l10n/sk_SK/app_sk_SK.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Companies", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Completion Date", "@completionDate": {}, "configureServer": "Configure server settings", diff --git a/lib/l10n/sl_SI/app_sl_SI.arb b/lib/l10n/sl_SI/app_sl_SI.arb index e3b2c50c..e82b80f2 100644 --- a/lib/l10n/sl_SI/app_sl_SI.arb +++ b/lib/l10n/sl_SI/app_sl_SI.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Companies", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Completion Date", "@completionDate": {}, "configureServer": "Configure server settings", diff --git a/lib/l10n/sr_CS/app_sr_CS.arb b/lib/l10n/sr_CS/app_sr_CS.arb index d4f82156..856048e9 100644 --- a/lib/l10n/sr_CS/app_sr_CS.arb +++ b/lib/l10n/sr_CS/app_sr_CS.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Kompanije", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Completion Date", "@completionDate": {}, "configureServer": "Konfiguriši podešavanja servera", diff --git a/lib/l10n/sv_SE/app_sv_SE.arb b/lib/l10n/sv_SE/app_sv_SE.arb index ca1b2a45..502ab65a 100644 --- a/lib/l10n/sv_SE/app_sv_SE.arb +++ b/lib/l10n/sv_SE/app_sv_SE.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Företag", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Datum slutfört", "@completionDate": {}, "configureServer": "Konfigurera serverinställningar", diff --git a/lib/l10n/th_TH/app_th_TH.arb b/lib/l10n/th_TH/app_th_TH.arb index d69c076b..c97b24cb 100644 --- a/lib/l10n/th_TH/app_th_TH.arb +++ b/lib/l10n/th_TH/app_th_TH.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Companies", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Completion Date", "@completionDate": {}, "configureServer": "Configure server settings", diff --git a/lib/l10n/tr_TR/app_tr_TR.arb b/lib/l10n/tr_TR/app_tr_TR.arb index f2051823..39cc2d7a 100644 --- a/lib/l10n/tr_TR/app_tr_TR.arb +++ b/lib/l10n/tr_TR/app_tr_TR.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Şirketler", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Tamamlanma Tarihi", "@completionDate": {}, "configureServer": "Sunucu ayarlarınızı yapılandırın", diff --git a/lib/l10n/uk_UA/app_uk_UA.arb b/lib/l10n/uk_UA/app_uk_UA.arb index 39666bb2..5fc29110 100644 --- a/lib/l10n/uk_UA/app_uk_UA.arb +++ b/lib/l10n/uk_UA/app_uk_UA.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Компанії", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Дата завершення", "@completionDate": {}, "configureServer": "Налаштування сервера", diff --git a/lib/l10n/vi_VN/app_vi_VN.arb b/lib/l10n/vi_VN/app_vi_VN.arb index 0dd51aed..f43a6d52 100644 --- a/lib/l10n/vi_VN/app_vi_VN.arb +++ b/lib/l10n/vi_VN/app_vi_VN.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "Doanh nghiệp", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Completion Date", "@completionDate": {}, "configureServer": "Cấu hình thiết lập máy chủ", diff --git a/lib/l10n/zh_CN/app_zh_CN.arb b/lib/l10n/zh_CN/app_zh_CN.arb index e1cf2b99..2f451878 100644 --- a/lib/l10n/zh_CN/app_zh_CN.arb +++ b/lib/l10n/zh_CN/app_zh_CN.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "公司", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "完成日期", "@completionDate": {}, "configureServer": "配置服务器的设置", @@ -1114,7 +1118,7 @@ "@price": {}, "priceRange": "价格范围", "@priceRange": {}, - "priceOverrideMin": "Minimum Price Override", + "priceOverrideMin": "最低价格覆盖", "@priceOverrideMin": {}, "priceOverrideMax": "Maximum Price Override", "@priceOverrideMax": {}, diff --git a/lib/l10n/zh_TW/app_zh_TW.arb b/lib/l10n/zh_TW/app_zh_TW.arb index 58954c0f..8a0a3274 100644 --- a/lib/l10n/zh_TW/app_zh_TW.arb +++ b/lib/l10n/zh_TW/app_zh_TW.arb @@ -178,6 +178,10 @@ "@companyUpdated": {}, "companies": "公司", "@companies": {}, + "complete": "Complete", + "@complete": {}, + "completeOrder": "Complete Order", + "@completeOrder": {}, "completionDate": "Completion Date", "@completionDate": {}, "configureServer": "伺服器設定", From 449f4a4ce5be085080e636a83cb17e28b460c2b9 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 30 Aug 2025 21:56:57 +1000 Subject: [PATCH 02/40] New Crowdin updates (#689) * New translations app_en.arb (Italian) * New translations app_en.arb (Chinese Simplified) --- lib/l10n/it_IT/app_it_IT.arb | 4 ++-- lib/l10n/zh_CN/app_zh_CN.arb | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/l10n/it_IT/app_it_IT.arb b/lib/l10n/it_IT/app_it_IT.arb index f918e7ad..b26869e7 100644 --- a/lib/l10n/it_IT/app_it_IT.arb +++ b/lib/l10n/it_IT/app_it_IT.arb @@ -178,9 +178,9 @@ "@companyUpdated": {}, "companies": "Aziende", "@companies": {}, - "complete": "Complete", + "complete": "Completato", "@complete": {}, - "completeOrder": "Complete Order", + "completeOrder": "Ordine completo", "@completeOrder": {}, "completionDate": "Data di completamento", "@completionDate": {}, diff --git a/lib/l10n/zh_CN/app_zh_CN.arb b/lib/l10n/zh_CN/app_zh_CN.arb index 2f451878..c2eaff81 100644 --- a/lib/l10n/zh_CN/app_zh_CN.arb +++ b/lib/l10n/zh_CN/app_zh_CN.arb @@ -178,9 +178,9 @@ "@companyUpdated": {}, "companies": "公司", "@companies": {}, - "complete": "Complete", + "complete": "完成", "@complete": {}, - "completeOrder": "Complete Order", + "completeOrder": "完成订单", "@completeOrder": {}, "completionDate": "完成日期", "@completionDate": {}, @@ -272,7 +272,7 @@ "@editItem": {}, "editLineItem": "编辑行项目", "@editLineItem": {}, - "email": "Email", + "email": "电子邮件", "@email": {}, "enterPassword": "输入密码", "@enterPassword": {}, @@ -632,7 +632,7 @@ "@permissionAccountDenied": {}, "permissionRequired": "需要授权:", "@permissionRequired": {}, - "phone": "Phone", + "phone": "电话", "@phone": {}, "printLabel": "打印标签", "@printLabel": {}, @@ -1120,7 +1120,7 @@ "@priceRange": {}, "priceOverrideMin": "最低价格覆盖", "@priceOverrideMin": {}, - "priceOverrideMax": "Maximum Price Override", + "priceOverrideMax": "最高自定义价格", "@priceOverrideMax": {}, "salePrice": "销售价格", "@salePrice": {}, From d237a0e076593833c9edeaece7a2e1d65afa7661 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 4 Sep 2025 11:33:00 +1000 Subject: [PATCH 03/40] New Crowdin updates (#690) * New translations app_en.arb (Turkish) * New translations app_en.arb (Hindi) * New translations app_en.arb (German) * New translations app_en.arb (Chinese Simplified) --- lib/l10n/de_DE/app_de_DE.arb | 2 +- lib/l10n/hi_IN/app_hi_IN.arb | 4 ++-- lib/l10n/tr_TR/app_tr_TR.arb | 4 ++-- lib/l10n/zh_CN/app_zh_CN.arb | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/l10n/de_DE/app_de_DE.arb b/lib/l10n/de_DE/app_de_DE.arb index 319e8883..3bb7820c 100644 --- a/lib/l10n/de_DE/app_de_DE.arb +++ b/lib/l10n/de_DE/app_de_DE.arb @@ -178,7 +178,7 @@ "@companyUpdated": {}, "companies": "Firmen", "@companies": {}, - "complete": "Complete", + "complete": "", "@complete": {}, "completeOrder": "Complete Order", "@completeOrder": {}, diff --git a/lib/l10n/hi_IN/app_hi_IN.arb b/lib/l10n/hi_IN/app_hi_IN.arb index 5d4fb5bf..859bb73a 100644 --- a/lib/l10n/hi_IN/app_hi_IN.arb +++ b/lib/l10n/hi_IN/app_hi_IN.arb @@ -26,7 +26,7 @@ "@addStock": { "description": "add stock" }, - "address": "Address", + "address": "", "@address": {}, "appAbout": "About InvenTree", "@appAbout": {}, @@ -112,7 +112,7 @@ "@barcodeScanDelay": {}, "barcodeScanDelayDetail": "Delay between barcode scans", "@barcodeScanDelayDetail": {}, - "barcodeScanGeneral": "Scan an InvenTree barcode", + "barcodeScanGeneral": "InvenTree बारकोड स्कैन करें", "@barcodeScanGeneral": {}, "barcodeScanInItems": "Scan stock items into this location", "@barcodeScanInItems": {}, diff --git a/lib/l10n/tr_TR/app_tr_TR.arb b/lib/l10n/tr_TR/app_tr_TR.arb index 39cc2d7a..8430f4c1 100644 --- a/lib/l10n/tr_TR/app_tr_TR.arb +++ b/lib/l10n/tr_TR/app_tr_TR.arb @@ -178,9 +178,9 @@ "@companyUpdated": {}, "companies": "Şirketler", "@companies": {}, - "complete": "Complete", + "complete": "Tamamlandı", "@complete": {}, - "completeOrder": "Complete Order", + "completeOrder": "Siparişi Tamamla", "@completeOrder": {}, "completionDate": "Tamamlanma Tarihi", "@completionDate": {}, diff --git a/lib/l10n/zh_CN/app_zh_CN.arb b/lib/l10n/zh_CN/app_zh_CN.arb index c2eaff81..84422dd6 100644 --- a/lib/l10n/zh_CN/app_zh_CN.arb +++ b/lib/l10n/zh_CN/app_zh_CN.arb @@ -286,7 +286,7 @@ "@errorCreate": {}, "errorDelete": "删除数据库条目时出错", "@errorDelete": {}, - "errorDetails": "c w错误详情", + "errorDetails": "错误详情", "@errorDetails": {}, "errorFetch": "从服务器获取数据时出错", "@errorFetch": {}, From bdc55733119ae875b2d01dbdd07f880d87a0a678 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sun, 28 Sep 2025 13:34:22 +1000 Subject: [PATCH 04/40] Re-order barcode scanning priority (#693) * Re-order barcode scanning priority - Closes https://github.com/inventree/inventree-app/issues/692 * dart format * Try with removed line * Try without pythonscript * just pub get * try with fvm * Remove fvm * set working dir * try just pub get * Install python first * Updates * Use fvm * Adjust CI --- .github/workflows/ci.yaml | 23 +++++++++++++---------- assets/release_notes.md | 5 +++++ find_dart_files.py | 2 ++ lib/barcode/barcode.dart | 6 +++--- pubspec.yaml | 2 +- 5 files changed, 24 insertions(+), 14 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index b61677de..2ecf506b 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -30,6 +30,11 @@ jobs: with: submodules: recursive + - name: Install Python + uses: actions/setup-python@v4 + with: + python-version: 3.9 + - name: Setup Java uses: actions/setup-java@v3 with: @@ -53,20 +58,18 @@ jobs: - name: Collect Translation Files run: | cd lib/l10n - python3 collect_translations.py + python collect_translations.py - name: Static Analysis Tests + working-directory: . run: | - python3 find_dart_files.py - flutter pub get - flutter analyze + python ./find_dart_files.py + dart pub global activate fvm + fvm install + fvm flutter pub get + fvm flutter analyze dart format --output=none --set-exit-if-changed . - - name: Install Python - uses: actions/setup-python@v4 - with: - python-version: 3.9 - - name: Start InvenTree Server run: | sudo apt-get install python3-dev python3-pip python3-venv python3-wheel g++ @@ -82,7 +85,7 @@ jobs: - name: Unit Tests run: | - flutter test --coverage + fvm flutter test --coverage - name: Coveralls uses: coverallsapp/github-action@master diff --git a/assets/release_notes.md b/assets/release_notes.md index de12516f..78696039 100644 --- a/assets/release_notes.md +++ b/assets/release_notes.md @@ -1,3 +1,8 @@ +### 0.19.3 - September 2025 +--- + +- Fixes incorrect priority of barcode scanner results + ### 0.19.2 - August 2025 --- diff --git a/find_dart_files.py b/find_dart_files.py index dbb1479b..80fba3a1 100644 --- a/find_dart_files.py +++ b/find_dart_files.py @@ -13,6 +13,8 @@ from pathlib import Path if __name__ == "__main__": dart_files = Path("lib").rglob("*.dart") + print("Discovering dart files..."); + with open("test/coverage_helper_test.dart", "w") as f: f.write("// ignore_for_file: unused_import\n\n") f.write("// dart format off\n\n") diff --git a/lib/barcode/barcode.dart b/lib/barcode/barcode.dart index ddbb319e..8fe50caa 100644 --- a/lib/barcode/barcode.dart +++ b/lib/barcode/barcode.dart @@ -250,12 +250,12 @@ class BarcodeScanHandler extends BarcodeHandler { // The following model types can be matched with barcodes List validModels = [ - InvenTreePart.MODEL_TYPE, - InvenTreeCompany.MODEL_TYPE, InvenTreeStockItem.MODEL_TYPE, - InvenTreeStockLocation.MODEL_TYPE, InvenTreeSupplierPart.MODEL_TYPE, InvenTreeManufacturerPart.MODEL_TYPE, + InvenTreePart.MODEL_TYPE, + InvenTreeStockLocation.MODEL_TYPE, + InvenTreeCompany.MODEL_TYPE, ]; if (InvenTreeAPI().supportsOrderBarcodes) { diff --git a/pubspec.yaml b/pubspec.yaml index e1629a55..0b9b3d55 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: inventree description: InvenTree stock management -version: 0.19.2+101 +version: 0.19.3+102 environment: sdk: ^3.8.1 From 1407d8bc37710af51c8a7adbd34acd5362239c3d Mon Sep 17 00:00:00 2001 From: Oliver Date: Sun, 28 Sep 2025 16:47:39 +1000 Subject: [PATCH 05/40] Use fvm for building workflows (#694) --- .github/workflows/android.yaml | 6 ++++-- .github/workflows/ios.yaml | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/android.yaml b/.github/workflows/android.yaml index 117c9a85..9f30b481 100644 --- a/.github/workflows/android.yaml +++ b/.github/workflows/android.yaml @@ -50,5 +50,7 @@ jobs: - name: Build for Android run: | - flutter pub get - flutter build apk --debug + dart pub global activate fvm + fvm install + fvm flutter pub get + fvm flutter build apk --debug diff --git a/.github/workflows/ios.yaml b/.github/workflows/ios.yaml index 53e8a301..724fa570 100644 --- a/.github/workflows/ios.yaml +++ b/.github/workflows/ios.yaml @@ -46,9 +46,11 @@ jobs: - name: Build for iOS run: | - flutter pub get + dart pub global activate fvm + fvm install + fvm flutter pub get cd ios pod repo update pod install cd .. - flutter build ios --release --no-codesign --no-tree-shake-icons + fvm flutter build ios --release --no-codesign --no-tree-shake-icons From 790abb4c7dcae80c207698dd70677c87d6a5be32 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 11 Oct 2025 12:07:58 +1100 Subject: [PATCH 06/40] New Crowdin updates (#695) * New translations app_en.arb (Hungarian) * New translations app_en.arb (Czech) * New translations app_en.arb (Swedish) * New translations app_en.arb (Polish) * New translations app_en.arb (Russian) * New translations app_en.arb (Portuguese, Brazilian) --- lib/l10n/cs_CZ/app_cs_CZ.arb | 6 ++--- lib/l10n/hu_HU/app_hu_HU.arb | 46 ++++++++++++++++++------------------ lib/l10n/pl_PL/app_pl_PL.arb | 28 +++++++++++----------- lib/l10n/pt_BR/app_pt_BR.arb | 38 ++++++++++++++--------------- lib/l10n/ru_RU/app_ru_RU.arb | 16 ++++++------- lib/l10n/sv_SE/app_sv_SE.arb | 16 ++++++------- 6 files changed, 75 insertions(+), 75 deletions(-) diff --git a/lib/l10n/cs_CZ/app_cs_CZ.arb b/lib/l10n/cs_CZ/app_cs_CZ.arb index 3258bc77..ecd7afef 100644 --- a/lib/l10n/cs_CZ/app_cs_CZ.arb +++ b/lib/l10n/cs_CZ/app_cs_CZ.arb @@ -178,9 +178,9 @@ "@companyUpdated": {}, "companies": "Společnosti", "@companies": {}, - "complete": "Complete", + "complete": "Dokončit", "@complete": {}, - "completeOrder": "Complete Order", + "completeOrder": "Dokončit objednávku", "@completeOrder": {}, "completionDate": "Datum dokončení", "@completionDate": {}, @@ -272,7 +272,7 @@ "@editItem": {}, "editLineItem": "Upravit položku", "@editLineItem": {}, - "email": "Mail", + "email": "E-mail", "@email": {}, "enterPassword": "Zadejte heslo", "@enterPassword": {}, diff --git a/lib/l10n/hu_HU/app_hu_HU.arb b/lib/l10n/hu_HU/app_hu_HU.arb index 8b36a563..31121be2 100644 --- a/lib/l10n/hu_HU/app_hu_HU.arb +++ b/lib/l10n/hu_HU/app_hu_HU.arb @@ -54,7 +54,7 @@ "@appSettingsDetails": {}, "assignedToMe": "Hozzámrendelt", "@assignedToMe": {}, - "assignedToMeDetail": "Show orders which are assigned to me", + "assignedToMeDetail": "Mutasd az én rendeléseim", "@assignedToMeDetail": {}, "attachments": "Mellékletek", "@attachments": {}, @@ -146,7 +146,7 @@ "@build": {}, "building": "Gyártásban", "@building": {}, - "cameraCreationError": "Could not open camera controller", + "cameraCreationError": "Nem sikerült a kameravezérlőt megnyitni", "@cameraCreationError": {}, "cameraInternal": "Belső kamera", "@cameraInternal": {}, @@ -178,9 +178,9 @@ "@companyUpdated": {}, "companies": "Cégek", "@companies": {}, - "complete": "Complete", + "complete": "Kész", "@complete": {}, - "completeOrder": "Complete Order", + "completeOrder": "Rendelés teljesítése", "@completeOrder": {}, "completionDate": "Befejezés dátuma", "@completionDate": {}, @@ -306,9 +306,9 @@ "@expiryExpired": {}, "expiryStale": "Elavult", "@expiryStale": {}, - "extraLineItem": "Extra Line Item", + "extraLineItem": "Egyéb tétel", "@extraLineItem": {}, - "extraLineItems": "Extra Line Items", + "extraLineItems": "Egyéb tételek", "@extraLineItems": {}, "feedback": "Visszajelzés", "@feedback": {}, @@ -534,7 +534,7 @@ "@noResponse": {}, "noResults": "Nincs találat", "@noResults": {}, - "noImageAvailable": "No image available", + "noImageAvailable": "Nincs elérhető kép", "@noImageAvailable": {}, "noSubcategories": "Nincsenek alkategóriák", "@noSubcategories": {}, @@ -600,7 +600,7 @@ "@partNoResults": {}, "partPricing": "Alkatrész árazása", "@partPricing": {}, - "partPricingSettingDetail": "Display part pricing information", + "partPricingSettingDetail": "Alkatrész árazási információk megjelenítése", "@pricingSettingDetail": {}, "partSettings": "Alkatrész beállítások", "@partSettings": {}, @@ -674,17 +674,17 @@ "@profileTapToCreate": {}, "projectCode": "Projektszám", "@projectCode": {}, - "purchaseOrderConfirmScan": "Confirm Scan Data", + "purchaseOrderConfirmScan": "Beolvasott adatok jóváhagyása", "@purchaseOrderConfirmScan": {}, - "purchaseOrderConfirmScanDetail": "Confirm details when scanning in items", + "purchaseOrderConfirmScanDetail": "Tételek részleteinek jóváhagyása beolvasás közben", "@purchaseOrderConfirmScanDetail": {}, - "purchaseOrderEnable": "Enable Purchase Orders", + "purchaseOrderEnable": "Beszerzési rendelések engedélyezése", "@purchaseOrderEnable": {}, - "purchaseOrderEnableDetail": "Enable purchase order functionality", + "purchaseOrderEnableDetail": "Értékesítési rendelés funkció aktiválása", "@purchaseOrderEnableDetail": {}, "purchaseOrderShowCamera": "Kamera gyorsbillentyű", "@purchaseOrderShowCamera": {}, - "purchaseOrderShowCameraDetail": "Enable image upload shortcut on purchase order screen", + "purchaseOrderShowCameraDetail": "Képfeltöltés shortcut engedélyezése az beszerzési rendelés oldalon", "@purchaseOrderShowCameraDetail": {}, "purchaseOrder": "Beszerzési rendelés", "@purchaseOrder": {}, @@ -806,7 +806,7 @@ "@salesOrders": {}, "salesOrderEnable": "Vevői rendelések engedélyezése", "@salesOrderEnable": {}, - "salesOrderEnableDetail": "Értékesítési rendés funkció aktiválása", + "salesOrderEnableDetail": "Értékesítési rendelés funkció aktiválása", "@salesOrderEnableDetail": {}, "salesOrderShowCamera": "Kamera gyorsbillentyű", "@salesOrderShowCamera": {}, @@ -1074,7 +1074,7 @@ "@translateHelp": {}, "unavailable": "Nem elérhető", "@unavailable": {}, - "unavailableDetail": "Item is not available", + "unavailableDetail": "Tétel nem elérhető", "@unavailableDetail": {}, "unitPrice": "Egységár", "@unitPrice": {}, @@ -1118,15 +1118,15 @@ "@price": {}, "priceRange": "Ártartomány", "@priceRange": {}, - "priceOverrideMin": "Minimum Price Override", + "priceOverrideMin": "Minimális Ár Felülbírálás", "@priceOverrideMin": {}, - "priceOverrideMax": "Maximum Price Override", + "priceOverrideMax": "Maximumális Ár Felülbírálás", "@priceOverrideMax": {}, "salePrice": "Eladási ár", "@salePrice": {}, "saleHistory": "Eladási előzmények", "@saleHistory": {}, - "supplierPricing": "Supplier Pricing", + "supplierPricing": "Beszállítói árazás", "@supplierPricing": {}, "bomCost": "Alkatrészjegyzék költség", "@bomCost": {}, @@ -1134,19 +1134,19 @@ "@internalCost": {}, "variantCost": "Variáns költsége", "@variantCost": {}, - "overallPricing": "Overall Pricing", + "overallPricing": "Általános árazás", "@overallPricing": {}, - "pricingOverrides": "Pricing Overrides", + "pricingOverrides": "Árazás felülbírálások", "@pricingOverrides": {}, "currency": "Pénznem", "@currency": {}, "priceBreaks": "Ársávok", "@priceBreaks": {}, - "noPricingAvailable": "No pricing available", + "noPricingAvailable": "Árazás nem elérhető", "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", + "noPricingDataFound": "Nincs árazási információ ehhez az alkatrészhez", "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", + "deleteImageConfirmation": "Biztosan törli a képet?", "@deleteImageConfirmation": {}, "deleteImageTooltip": "Kép törlése", "@deleteImageTooltip": {}, diff --git a/lib/l10n/pl_PL/app_pl_PL.arb b/lib/l10n/pl_PL/app_pl_PL.arb index 68648a71..72c5c7f7 100644 --- a/lib/l10n/pl_PL/app_pl_PL.arb +++ b/lib/l10n/pl_PL/app_pl_PL.arb @@ -36,13 +36,13 @@ "@appDetails": {}, "allocated": "Przydzielono", "@allocated": {}, - "aspectRatio16x9": "", + "aspectRatio16x9": "16:9", "@aspectRatio16x9": {}, "aspectRatio3x2": "3:2", "@aspectRatio3x2": {}, "aspectRatio4x3": "4:3", "@aspectRatio4x3": {}, - "aspectRatioSquare": "Square (1:1)", + "aspectRatioSquare": "Kwadrat (1:1)", "@aspectRatioSquare": {}, "allocateStock": "Przydziel zapasy", "@allocateStock": {}, @@ -52,7 +52,7 @@ "@appSettings": {}, "appSettingsDetails": "Konfiguruj ustawienia aplikacji InvenTree", "@appSettingsDetails": {}, - "assignedToMe": "", + "assignedToMe": "Przypisane do mnie", "@assignedToMe": {}, "assignedToMeDetail": "Pokaż zlecenia, które zostały do mnie przypisane", "@assignedToMeDetail": {}, @@ -178,9 +178,9 @@ "@companyUpdated": {}, "companies": "Firmy", "@companies": {}, - "complete": "Complete", + "complete": "Zakończono", "@complete": {}, - "completeOrder": "Complete Order", + "completeOrder": "Zakończ zamówienie", "@completeOrder": {}, "completionDate": "Data ukończenia", "@completionDate": {}, @@ -450,7 +450,7 @@ "@itemInLocation": {}, "itemDeleted": "Element został usunięty", "@itemDeleted": {}, - "itemUpdated": "Item updated", + "itemUpdated": "Element został zaktualizowany.", "@itemUpdated": {}, "keywords": "Słowa kluczowe", "@keywords": {}, @@ -748,7 +748,7 @@ "@reportBug": {}, "reportBugDescription": "Prześlij raport o błędzie (wymaga konta GitHub)", "@reportBugDescription": {}, - "responsible": "Responsible", + "responsible": "Odpowiedzialny", "@responsible": {}, "results": "Wyniki", "@results": {}, @@ -1128,9 +1128,9 @@ "@saleHistory": {}, "supplierPricing": "Supplier Pricing", "@supplierPricing": {}, - "bomCost": "BOM Cost", + "bomCost": "Koszt BOM", "@bomCost": {}, - "internalCost": "Internal Cost", + "internalCost": "Koszt wewnętrzny", "@internalCost": {}, "variantCost": "Variant Cost", "@variantCost": {}, @@ -1138,17 +1138,17 @@ "@overallPricing": {}, "pricingOverrides": "Pricing Overrides", "@pricingOverrides": {}, - "currency": "Currency", + "currency": "Waluta", "@currency": {}, "priceBreaks": "Price Breaks", "@priceBreaks": {}, - "noPricingAvailable": "No pricing available", + "noPricingAvailable": "Cena nie jest dostępna", "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", + "noPricingDataFound": "Nie znaleziono danych dotyczących cen dla tej części", "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", + "deleteImageConfirmation": "Czy na pewno chcesz usunąć ten obraz?", "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", + "deleteImageTooltip": "Usuń obraz", "@deleteImageTooltip": {}, "deleteImage": "Usuń obraz", "@deleteImage": {} diff --git a/lib/l10n/pt_BR/app_pt_BR.arb b/lib/l10n/pt_BR/app_pt_BR.arb index 4d4cd098..7f67a03a 100644 --- a/lib/l10n/pt_BR/app_pt_BR.arb +++ b/lib/l10n/pt_BR/app_pt_BR.arb @@ -180,9 +180,9 @@ "@companies": {}, "complete": "Concluído", "@complete": {}, - "completeOrder": "Complete Order", + "completeOrder": "Finalizar pedido", "@completeOrder": {}, - "completionDate": "Completion Date", + "completionDate": "Data de conclusão", "@completionDate": {}, "configureServer": "Definir as configurações do servidor", "@configureServer": {}, @@ -304,11 +304,11 @@ "@expiryDate": {}, "expiryExpired": "Vencido", "@expiryExpired": {}, - "expiryStale": "Stale", + "expiryStale": "Inativo", "@expiryStale": {}, - "extraLineItem": "Extra Line Item", + "extraLineItem": "Item de Linha extra", "@extraLineItem": {}, - "extraLineItems": "Extra Line Items", + "extraLineItems": "Itens de linha extra", "@extraLineItems": {}, "feedback": "Feedback", "@feedback": {}, @@ -600,7 +600,7 @@ "@partNoResults": {}, "partPricing": "Preço de Peça", "@partPricing": {}, - "partPricingSettingDetail": "Display part pricing information", + "partPricingSettingDetail": "Exibir informações de preço de parte", "@pricingSettingDetail": {}, "partSettings": "Configurações de Peça", "@partSettings": {}, @@ -674,9 +674,9 @@ "@profileTapToCreate": {}, "projectCode": "Código do projeto", "@projectCode": {}, - "purchaseOrderConfirmScan": "Confirm Scan Data", + "purchaseOrderConfirmScan": "Confirmar dados de varredura", "@purchaseOrderConfirmScan": {}, - "purchaseOrderConfirmScanDetail": "Confirm details when scanning in items", + "purchaseOrderConfirmScanDetail": "Confirmar detalhes ao escanear itens", "@purchaseOrderConfirmScanDetail": {}, "purchaseOrderEnable": "Habilitar Pedidos de Compra", "@purchaseOrderEnable": {}, @@ -1044,7 +1044,7 @@ "@timeout": { "description": "" }, - "toggleTorch": "Toggle Torch", + "toggleTorch": "Lig/Desl. lanterna", "@toggleTorch": {}, "tokenError": "Error de token", "@tokenError": {}, @@ -1118,31 +1118,31 @@ "@price": {}, "priceRange": "Faixa de Preço", "@priceRange": {}, - "priceOverrideMin": "Minimum Price Override", + "priceOverrideMin": "Substituição de preço mínimo", "@priceOverrideMin": {}, - "priceOverrideMax": "Maximum Price Override", + "priceOverrideMax": "Substituição de preço máximo", "@priceOverrideMax": {}, "salePrice": "Preço de Venda", "@salePrice": {}, "saleHistory": "Histórico de Vendas", "@saleHistory": {}, - "supplierPricing": "Supplier Pricing", + "supplierPricing": "Preço do fornecedor", "@supplierPricing": {}, - "bomCost": "BOM Cost", + "bomCost": "Custo de LDM", "@bomCost": {}, - "internalCost": "Internal Cost", + "internalCost": "Custo Interno", "@internalCost": {}, - "variantCost": "Variant Cost", + "variantCost": "Custo Variante", "@variantCost": {}, - "overallPricing": "Overall Pricing", + "overallPricing": "Precificação Geral", "@overallPricing": {}, - "pricingOverrides": "Pricing Overrides", + "pricingOverrides": "Sobrescrever Preço", "@pricingOverrides": {}, "currency": "Moeda", "@currency": {}, - "priceBreaks": "Price Breaks", + "priceBreaks": "Quebra de Preço", "@priceBreaks": {}, - "noPricingAvailable": "No pricing available", + "noPricingAvailable": "Nenhum preço disponível", "@noPricingAvailable": {}, "noPricingDataFound": "No pricing data found for this part", "@noPricingDataFound": {}, diff --git a/lib/l10n/ru_RU/app_ru_RU.arb b/lib/l10n/ru_RU/app_ru_RU.arb index 7437e273..35294d1c 100644 --- a/lib/l10n/ru_RU/app_ru_RU.arb +++ b/lib/l10n/ru_RU/app_ru_RU.arb @@ -178,7 +178,7 @@ "@companyUpdated": {}, "companies": "Компании", "@companies": {}, - "complete": "Complete", + "complete": "Завершить", "@complete": {}, "completeOrder": "Complete Order", "@completeOrder": {}, @@ -202,9 +202,9 @@ }, "credits": "Авторы", "@credits": {}, - "crop": "Crop", + "crop": "Обрезать", "@crop": {}, - "cropImage": "Crop Image", + "cropImage": "Обрезать изображение", "@cropImage": {}, "customer": "Клиент", "@customer": {}, @@ -244,7 +244,7 @@ }, "documentation": "Документация", "@documentation": {}, - "downloadComplete": "Download Complete", + "downloadComplete": "Загрузка завершена", "@downloadComplete": {}, "downloadError": "Error downloading image", "@downloadError": {}, @@ -632,7 +632,7 @@ "@permissionAccountDenied": {}, "permissionRequired": "Требуется разрешение", "@permissionRequired": {}, - "phone": "Phone", + "phone": "Телефон", "@phone": {}, "printLabel": "Печать этикетки", "@printLabel": {}, @@ -728,7 +728,7 @@ "@reference": {}, "refresh": "Обновить", "@refresh": {}, - "rotateClockwise": "Rotate 90° clockwise", + "rotateClockwise": "Повернуть на 90° по часовой стрелке", "@rotateClockwise": {}, "refreshing": "Обновление…", "@refreshing": {}, @@ -1088,7 +1088,7 @@ "@uploadFailed": {}, "uploadSuccess": "Файл загружен", "@uploadSuccess": {}, - "uploadImage": "Upload Image", + "uploadImage": "Загрузить изображение", "@uploadImage": {}, "usedIn": "Используется в", "@usedIn": {}, @@ -1146,7 +1146,7 @@ "@noPricingAvailable": {}, "noPricingDataFound": "Для этой детали не найдены данные о ценах", "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", + "deleteImageConfirmation": "Вы уверены, что хотите удалить изображение?", "@deleteImageConfirmation": {}, "deleteImageTooltip": "Delete Image", "@deleteImageTooltip": {}, diff --git a/lib/l10n/sv_SE/app_sv_SE.arb b/lib/l10n/sv_SE/app_sv_SE.arb index 502ab65a..14b3b901 100644 --- a/lib/l10n/sv_SE/app_sv_SE.arb +++ b/lib/l10n/sv_SE/app_sv_SE.arb @@ -178,9 +178,9 @@ "@companyUpdated": {}, "companies": "Företag", "@companies": {}, - "complete": "Complete", + "complete": "Slutförd", "@complete": {}, - "completeOrder": "Complete Order", + "completeOrder": "Slutför Order", "@completeOrder": {}, "completionDate": "Datum slutfört", "@completionDate": {}, @@ -202,9 +202,9 @@ }, "credits": "Krediter", "@credits": {}, - "crop": "Crop", + "crop": "Beskär", "@crop": {}, - "cropImage": "Crop Image", + "cropImage": "Beskär Bild", "@cropImage": {}, "customer": "Kund", "@customer": {}, @@ -244,9 +244,9 @@ }, "documentation": "Dokumentation", "@documentation": {}, - "downloadComplete": "Download Complete", + "downloadComplete": "Nedladdning klar", "@downloadComplete": {}, - "downloadError": "Error downloading image", + "downloadError": "Fel vid nedladdning av bild", "@downloadError": {}, "downloading": "Laddar ner fil", "@downloading": {}, @@ -272,7 +272,7 @@ "@editItem": {}, "editLineItem": "Redigera radobjekt", "@editLineItem": {}, - "email": "Email", + "email": "E-post", "@email": {}, "enterPassword": "Ange lösenord", "@enterPassword": {}, @@ -534,7 +534,7 @@ "@noResponse": {}, "noResults": "Inga resultat", "@noResults": {}, - "noImageAvailable": "No image available", + "noImageAvailable": "Ingen bild tillgänglig", "@noImageAvailable": {}, "noSubcategories": "Inga underkategorier", "@noSubcategories": {}, From 6b67cc9e50b2c98c0b8c93c3ca31b5ab007cd0d1 Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 21 Oct 2025 16:28:53 +1100 Subject: [PATCH 07/40] New Crowdin updates (#696) * New translations app_en.arb (Russian) * New translations app_en.arb (Ukrainian) * New translations app_en.arb (Indonesian) * New translations app_en.arb (Vietnamese) --- lib/l10n/id_ID/app_id_ID.arb | 20 ++-- lib/l10n/ru_RU/app_ru_RU.arb | 20 ++-- lib/l10n/uk_UA/app_uk_UA.arb | 186 +++++++++++++++++------------------ lib/l10n/vi_VN/app_vi_VN.arb | 2 +- 4 files changed, 114 insertions(+), 114 deletions(-) diff --git a/lib/l10n/id_ID/app_id_ID.arb b/lib/l10n/id_ID/app_id_ID.arb index db93ff0c..f89f8bf2 100644 --- a/lib/l10n/id_ID/app_id_ID.arb +++ b/lib/l10n/id_ID/app_id_ID.arb @@ -42,7 +42,7 @@ "@aspectRatio3x2": {}, "aspectRatio4x3": "4:3", "@aspectRatio4x3": {}, - "aspectRatioSquare": "Square (1:1)", + "aspectRatioSquare": "Persegi (1:1)", "@aspectRatioSquare": {}, "allocateStock": "Alokasikan Stok", "@allocateStock": {}, @@ -52,9 +52,9 @@ "@appSettings": {}, "appSettingsDetails": "Konfigurasikan pengaturan aplikasi InvenTree", "@appSettingsDetails": {}, - "assignedToMe": "Assigned to Me", + "assignedToMe": "Ditugaskan kepada Saya", "@assignedToMe": {}, - "assignedToMeDetail": "Show orders which are assigned to me", + "assignedToMeDetail": "Tampilkan pesanan yang ditugaskan kepada saya", "@assignedToMeDetail": {}, "attachments": "Lampiran", "@attachments": {}, @@ -146,7 +146,7 @@ "@build": {}, "building": "Bangunan", "@building": {}, - "cameraCreationError": "Could not open camera controller", + "cameraCreationError": "Tidak dapat membuka pengontrol kamera", "@cameraCreationError": {}, "cameraInternal": "Kamera Internal", "@cameraInternal": {}, @@ -168,7 +168,7 @@ "@categoryUpdated": {}, "company": "Perusahaan", "@company": {}, - "companyAdd": "Add Company", + "companyAdd": "Tambahkan Perusahaan", "@companyAdd": {}, "companyEdit": "Rubah Perusahaan", "@companyEdit": {}, @@ -178,11 +178,11 @@ "@companyUpdated": {}, "companies": "Perusahaan", "@companies": {}, - "complete": "Complete", + "complete": "Selesai", "@complete": {}, - "completeOrder": "Complete Order", + "completeOrder": "Lengkapi Pesanan", "@completeOrder": {}, - "completionDate": "Completion Date", + "completionDate": "Tanggal Selesai", "@completionDate": {}, "configureServer": "Konfigurasikan pengaturan server", "@configureServer": {}, @@ -202,9 +202,9 @@ }, "credits": "Kredit", "@credits": {}, - "crop": "Crop", + "crop": "Pangkas", "@crop": {}, - "cropImage": "Crop Image", + "cropImage": "Pangkas Gambar", "@cropImage": {}, "customer": "Pelanggan", "@customer": {}, diff --git a/lib/l10n/ru_RU/app_ru_RU.arb b/lib/l10n/ru_RU/app_ru_RU.arb index 35294d1c..bbc7cc54 100644 --- a/lib/l10n/ru_RU/app_ru_RU.arb +++ b/lib/l10n/ru_RU/app_ru_RU.arb @@ -42,7 +42,7 @@ "@aspectRatio3x2": {}, "aspectRatio4x3": "4:3", "@aspectRatio4x3": {}, - "aspectRatioSquare": "Square (1:1)", + "aspectRatioSquare": "Квадрат (1:1)", "@aspectRatioSquare": {}, "allocateStock": "Выделить запас", "@allocateStock": {}, @@ -180,11 +180,11 @@ "@companies": {}, "complete": "Завершить", "@complete": {}, - "completeOrder": "Complete Order", + "completeOrder": "Завершить заказ", "@completeOrder": {}, "completionDate": "Дата завершения", "@completionDate": {}, - "configureServer": "Настройка параметров сервера", + "configureServer": "Изменить параметры сервера", "@configureServer": {}, "confirmScan": "Подтвердить перенос", "@confirmScan": {}, @@ -246,7 +246,7 @@ "@documentation": {}, "downloadComplete": "Загрузка завершена", "@downloadComplete": {}, - "downloadError": "Error downloading image", + "downloadError": "Ошибка загрузки изображения", "@downloadError": {}, "downloading": "Загрузка файла", "@downloading": {}, @@ -272,7 +272,7 @@ "@editItem": {}, "editLineItem": "Изменить позицию", "@editLineItem": {}, - "email": "Email", + "email": "Электронная почта", "@email": {}, "enterPassword": "Введите пароль", "@enterPassword": {}, @@ -326,11 +326,11 @@ "@filterAssemblyDetail": {}, "filterComponent": "Компонент", "@filterComponent": {}, - "filterComponentDetail": "Показывать части компонента", + "filterComponentDetail": "Показать части компонента", "@filterComponentDetail": {}, "filterExternal": "Внешний", "@filterExternal": {}, - "filterExternalDetail": "Показывать запасы во внешних местах", + "filterExternalDetail": "Показать запасы во внешних местах", "@filterExternalDetail": {}, "filterInStock": "В наличии", "@filterInStock": {}, @@ -534,7 +534,7 @@ "@noResponse": {}, "noResults": "Нет результатов", "@noResults": {}, - "noImageAvailable": "No image available", + "noImageAvailable": "Нет доступного изображения", "@noImageAvailable": {}, "noSubcategories": "Нет подкатегории", "@noSubcategories": {}, @@ -1148,8 +1148,8 @@ "@noPricingDataFound": {}, "deleteImageConfirmation": "Вы уверены, что хотите удалить изображение?", "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", + "deleteImageTooltip": "Удалить изображение", "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", + "deleteImage": "Удалить изображение", "@deleteImage": {} } \ No newline at end of file diff --git a/lib/l10n/uk_UA/app_uk_UA.arb b/lib/l10n/uk_UA/app_uk_UA.arb index 5fc29110..94a669fc 100644 --- a/lib/l10n/uk_UA/app_uk_UA.arb +++ b/lib/l10n/uk_UA/app_uk_UA.arb @@ -178,9 +178,9 @@ "@companyUpdated": {}, "companies": "Компанії", "@companies": {}, - "complete": "Complete", + "complete": "Завершити", "@complete": {}, - "completeOrder": "Complete Order", + "completeOrder": "Завершити замовлення", "@completeOrder": {}, "completionDate": "Дата завершення", "@completionDate": {}, @@ -504,11 +504,11 @@ "@loginEnterDetails": {}, "link": "Посилання", "@link": {}, - "lost": "Lost", + "lost": "Втрачено", "@lost": {}, - "manufacturerPart": "Manufacturer Part", + "manufacturerPart": "Виробник деталі", "@manufacturerPart": {}, - "manufacturerPartEdit": "Edit Manufacturer Part", + "manufacturerPartEdit": "Редагувати виробника деталі", "@manufacturerPartEdit": {}, "manufacturerPartNumber": "Номер позиції виробника", "@manufacturerPartNumber": {}, @@ -540,25 +540,25 @@ "@noSubcategories": {}, "noSubcategoriesAvailable": "No subcategories available", "@noSubcategoriesAvailable": {}, - "numberInvalid": "Invalid number", + "numberInvalid": "Некоректний номер", "@numberInvalid": {}, "onOrder": "On Order", "@onOrder": {}, "onOrderDetails": "Items currently on order", "@onOrderDetails": {}, - "orientation": "Screen Orientation", + "orientation": "Орієнтація екрана", "@orientation": {}, - "orientationDetail": "Screen orientation (requires restart)", + "orientationDetail": "Орієнтація екрана (потребує перезапуску)", "@orientationDetail": {}, - "orientationLandscape": "Landscape", + "orientationLandscape": "Альбомна орієнтація", "@orientationLandscape": {}, - "orientationPortrait": "Portrait", + "orientationPortrait": "Портретна орієнтація екрану", "@orientationPortrait": {}, - "orientationSystem": "System", + "orientationSystem": "Орієнтація задана системою", "@orientationSystem": {}, "outstanding": "Відмінно", "@outstanding": {}, - "outstandingOrderDetail": "Show outstanding orders", + "outstandingOrderDetail": "Показати незавершені замовлення", "@outstandingOrderDetail": {}, "overdue": "Протерміновані", "@overdue": {}, @@ -598,7 +598,7 @@ "@partsNone": {}, "partNoResults": "Немає позицій відповідних запиту", "@partNoResults": {}, - "partPricing": "Part Pricing", + "partPricing": "Ціна деталі", "@partPricing": {}, "partPricingSettingDetail": "Display part pricing information", "@pricingSettingDetail": {}, @@ -632,7 +632,7 @@ "@permissionAccountDenied": {}, "permissionRequired": "Потрібен дозвіл", "@permissionRequired": {}, - "phone": "Phone", + "phone": "Телефон", "@phone": {}, "printLabel": "Друк ярлика", "@printLabel": {}, @@ -700,23 +700,23 @@ "@purchaseOrderUpdated": {}, "purchasePrice": "Purchase Price", "@purchasePrice": {}, - "quantity": "Quantity", + "quantity": "Кількість", "@quantity": { "description": "Quantity" }, - "quantityAvailable": "Quantity Available", + "quantityAvailable": "Доступна кількість", "@quantityAvailable": {}, "quantityEmpty": "Quantity is empty", "@quantityEmpty": {}, - "quantityInvalid": "Quantity is invalid", + "quantityInvalid": "Некоректна кількість", "@quantityInvalid": {}, - "quantityPositive": "Quantity must be positive", + "quantityPositive": "Кількість мусить бути позитивною", "@quantityPositive": {}, - "queryEmpty": "Enter search query", + "queryEmpty": "Що шукати?", "@queryEmpty": {}, - "queryNoResults": "No results for query", + "queryNoResults": "Нічого не знайдено", "@queryNoResults": {}, - "received": "Received", + "received": "Отримано", "@received": {}, "receivedFilterDetail": "Show received items", "@receivedFilterDetail": {}, @@ -726,17 +726,17 @@ "@receivedItem": {}, "reference": "Reference", "@reference": {}, - "refresh": "Refresh", + "refresh": "Оновити", "@refresh": {}, - "rotateClockwise": "Rotate 90° clockwise", + "rotateClockwise": "Повернути на 90° за годинниковою стрілкою", "@rotateClockwise": {}, - "refreshing": "Refreshing", + "refreshing": "Оновлення", "@refreshing": {}, "rejected": "Rejected", "@rejected": {}, - "releaseNotes": "Release Notes", + "releaseNotes": "Замітки до випуску", "@releaseNotes": {}, - "remove": "Remove", + "remove": "Видалити", "@remove": { "description": "remove" }, @@ -744,47 +744,47 @@ "@removeStock": { "description": "remove stock" }, - "reportBug": "Report Bug", + "reportBug": "Зголосити помилку", "@reportBug": {}, "reportBugDescription": "Відправити звіт про помилку (потрібен обліковий запис GitHub)", "@reportBugDescription": {}, - "responsible": "Responsible", + "responsible": "Відповідальний", "@responsible": {}, - "results": "Results", + "results": "Результати", "@results": {}, - "request": "Request", + "request": "Запит", "@request": {}, - "requestFailed": "Request Failed", + "requestFailed": "Запит завершився помилкою", "@requestFailed": {}, - "requestSuccessful": "Request successful", + "requestSuccessful": "Успішний запит", "@requestSuccessful": {}, - "requestingData": "Requesting Data", + "requestingData": "Запит даних", "@requestingData": {}, "required": "Required", "@required": { "description": "This field is required" }, - "response400": "Bad Request", + "response400": "Некоректний запит", "@response400": {}, - "response401": "Unauthorized", + "response401": "Потрібна авторизація", "@response401": {}, - "response403": "Permission Denied", + "response403": "Доступ заборонено", "@response403": {}, - "response404": "Resource Not Found", + "response404": "Ресурс не знайдено", "@response404": {}, - "response405": "Method Not Allowed", + "response405": "Цей метод заборонений", "@response405": {}, - "response429": "Too Many Requests", + "response429": "Занадто багато запитів", "@response429": {}, - "response500": "Internal Server Error", + "response500": "Внутрішня помилка сервера", "@response500": {}, - "response501": "Not Implemented", + "response501": "Не реалізовано", "@response501": {}, - "response502": "Bad Gateway", + "response502": "Поганий шлюз", "@response502": {}, - "response503": "Service Unavailable", + "response503": "Сервіс недоступний", "@response503": {}, - "response504": "Gateway Timeout", + "response504": "Шлю не відповідає", "@response504": {}, "response505": "Версія HTTP не підтримується", "@response505": {}, @@ -832,17 +832,17 @@ "@scanIntoLocation": {}, "scanIntoLocationDetail": "Scan this item into location", "@scanIntoLocationDetail": {}, - "scannerExternal": "External Scanner", + "scannerExternal": "Зовнішній сканер", "@scannerExternal": {}, "scannerExternalDetail": "Використовувати зовнішній сканер для читання штрих-кодів (wedge режим)", "@scannerExternalDetail": {}, "scanReceivedParts": "Scan Received Parts", "@scanReceivedParts": {}, - "search": "Search", + "search": "Пошук", "@search": { "description": "search" }, - "searching": "Searching", + "searching": "Триває пошук", "@searching": {}, "searchLocation": "Search for location", "@searchLocation": {}, @@ -850,81 +850,81 @@ "@searchParts": {}, "searchStock": "Search Stock", "@searchStock": {}, - "select": "Select", + "select": "Вибрати", "@select": {}, - "selectFile": "Select File", + "selectFile": "Вибрати файл", "@selectFile": {}, - "selectImage": "Select Image", + "selectImage": "Виберіть зображення", "@selectImage": {}, "selectLocation": "Select a location", "@selectLocation": {}, - "send": "Send", + "send": "Відправити", "@send": {}, - "serialNumber": "Serial Number", + "serialNumber": "Серійний номер", "@serialNumber": {}, - "serialNumbers": "Serial Numbers", + "serialNumbers": "Серійні номери", "@serialNumbers": {}, - "server": "Server", + "server": "Сервер", "@server": {}, - "serverAddress": "Server Address", + "serverAddress": "Адреса сервера", "@serverAddress": {}, - "serverApiRequired": "Required API Version", + "serverApiRequired": "Вимагана версія API", "@serverApiRequired": {}, - "serverApiVersion": "Server API Version", + "serverApiVersion": "Версія API сервера", "@serverApiVersion": {}, - "serverAuthenticationError": "Authentication Error", + "serverAuthenticationError": "Помилка аутентифікації", "@serverAuthenticationError": {}, - "serverCertificateError": "Cerficate Error", + "serverCertificateError": "Помилка сертифіката", "@serverCertificateError": {}, - "serverCertificateInvalid": "Server HTTPS certificate is invalid", + "serverCertificateInvalid": "Помилка HTTPS сертифікату сервера", "@serverCertificateInvalid": {}, - "serverConnected": "Connected to Server", + "serverConnected": "Підключений до сервера", "@serverConnected": {}, - "serverConnecting": "Connecting to server", + "serverConnecting": "Триває підключення до сервера", "@serverConnecting": {}, - "serverCouldNotConnect": "Could not connect to server", + "serverCouldNotConnect": "Неможливо під'єднатися до сервера", "@serverCouldNotConnect": {}, "serverEmpty": "Server cannot be empty", "@serverEmpty": {}, - "serverError": "Server Error", + "serverError": "Помилка сервера", "@serverError": {}, - "serverDetails": "Server Details", + "serverDetails": "Інформація про сервер", "@serverDetails": {}, "serverMissingData": "На сервері відсутні обов'язкові поля для відповіді", "@serverMissingData": {}, - "serverOld": "Old Server Version", + "serverOld": "Стара версія сервера", "@serverOld": {}, - "serverSettings": "Server Settings", + "serverSettings": "Налаштування сервера", "@serverSettings": {}, - "serverStart": "Server must start with http[s]", + "serverStart": "Адреса сервера мусить починатися з http[s]", "@serverStart": {}, - "settings": "Settings", + "settings": "Налаштування", "@settings": {}, - "serverInstance": "Server Instance", + "serverInstance": "Екземпляр сервера", "@serverInstance": {}, - "serverNotConnected": "Server not connected", + "serverNotConnected": "Відсутнє з'єднання з сервером", "@serverNotConnected": {}, - "serverNotSelected": "Server not selected", + "serverNotSelected": "Сервер не вибраний", "@serverNotSelected": {}, "shipments": "Shipments", "@shipments": {}, "shipmentAdd": "Add Shipment", "@shipmentAdd": {}, - "shipped": "Shipped", + "shipped": "Відправлено", "@shipped": {}, "sku": "SKU", "@sku": {}, - "sounds": "Sounds", + "sounds": "Звуки", "@sounds": {}, - "soundOnBarcodeAction": "Play audible tone on barcode action", + "soundOnBarcodeAction": "Відтворити звук при скануванні", "@soundOnBarcodeAction": {}, - "soundOnServerError": "Play audible tone on server error", + "soundOnServerError": "Відтворити звук при помилці сервера", "@soundOnServerError": {}, - "startDate": "Start Date", + "startDate": "Дата початку", "@startDate": {}, - "status": "Status", + "status": "Статус", "@status": {}, - "statusCode": "Status Code", + "statusCode": "Код статусу", "@statusCode": {}, "stock": "Stock", "@stock": { @@ -994,7 +994,7 @@ "@submitFeedback": {}, "suppliedParts": "Supplied Parts", "@suppliedParts": {}, - "supplier": "Supplier", + "supplier": "Постачальник", "@supplier": {}, "supplierPart": "Supplier Part", "@supplierPart": {}, @@ -1006,47 +1006,47 @@ "@supplierPartUpdated": {}, "supplierParts": "Supplier Parts", "@supplierParts": {}, - "suppliers": "Suppliers", + "suppliers": "Постачальники", "@suppliers": {}, "supplierReference": "Supplier Reference", "@supplierReference": {}, "switchCamera": "Switch Camera", "@switchCamera": {}, - "takePicture": "Take Picture", + "takePicture": "Зробити фото", "@takePicture": {}, "targetDate": "Target Date", "@targetDate": {}, "templatePart": "Parent Template Part", "@templatePart": {}, - "testName": "Test Name", + "testName": "Назва тесту", "@testName": {}, - "testPassedOrFailed": "Test passed or failed", + "testPassedOrFailed": "Тест завершився успішно або помилкою", "@testPassedOrFailed": {}, - "testsRequired": "Required Tests", + "testsRequired": "Вимаганні тести", "@testsRequired": {}, - "testResults": "Test Results", + "testResults": "Результат тесту", "@testResults": { "description": "" }, - "testResultsDetail": "Display stock item test results", + "testResultsDetail": "Показати результати перевірки товару на складі", "@testResultsDetail": {}, - "testResultAdd": "Add Test Result", + "testResultAdd": "Додати результат тесту", "@testResultAdd": {}, - "testResultNone": "No Test Results", + "testResultNone": "Відсутні результати тесту", "@testResultNone": {}, - "testResultNoneDetail": "No test results available", + "testResultNoneDetail": "Результати тесту недоступні", "@testResultNoneDetail": {}, - "testResultUploadFail": "Error uploading test result", + "testResultUploadFail": "Помилка при завантаженні результатів тесту", "@testResultUploadFail": {}, "testResultUploadPass": "Test result uploaded", "@testResultUploadPass": {}, - "timeout": "Timeout", + "timeout": "Тайм-аут", "@timeout": { "description": "" }, "toggleTorch": "Toggle Torch", "@toggleTorch": {}, - "tokenError": "Token Error", + "tokenError": "Помилка токену", "@tokenError": {}, "tokenMissing": "Missing Token", "@tokenMissing": {}, diff --git a/lib/l10n/vi_VN/app_vi_VN.arb b/lib/l10n/vi_VN/app_vi_VN.arb index f43a6d52..cca60715 100644 --- a/lib/l10n/vi_VN/app_vi_VN.arb +++ b/lib/l10n/vi_VN/app_vi_VN.arb @@ -254,7 +254,7 @@ "@edit": { "description": "edit" }, - "editAttachment": "Edit Attachment", + "editAttachment": "Sửa tệp đính kèm", "@editAttachment": {}, "editCategory": "Sửa Danh mục", "@editCategory": {}, From 624655ec6b0a388cd9e85de0526021d8b10e7df0 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 24 Oct 2025 13:36:10 +1100 Subject: [PATCH 08/40] SalesOrderShipment (#697) * Add detail widget for SalesOrderShipment * Support editing of shipment details * Rearrange SalesOrderDetail page * Add support for attachments against shipment model * refactoring * Add shipment details page * Add user actions for shipments: - Check / uncheck - Take photo * Placeholder action to send shipment * Send shipment from app * Display pending shipments on the home screen * Improve rending for shipments list * Add class definition for SalesOrderAllocation * Display list of items allocated against SalesOrderShipment * Bump release notse * Click through to stock item * Bump version number * dart format * cleanup * Remove unused imports --- assets/release_notes.md | 8 + lib/api.dart | 2 + lib/api_form.dart | 13 +- lib/inventree/model.dart | 2 +- lib/inventree/sales_order.dart | 156 ++++++- lib/l10n/app_en.arb | 123 ++++-- lib/preferences.dart | 1 + lib/settings/home_settings.dart | 23 ++ lib/widget/attachment_widget.dart | 8 +- lib/widget/company/company_detail.dart | 2 +- .../company/manufacturer_part_detail.dart | 8 +- lib/widget/company/supplier_part_detail.dart | 8 +- lib/widget/home.dart | 34 ++ lib/widget/order/po_line_detail.dart | 2 +- lib/widget/order/sales_order_detail.dart | 41 +- lib/widget/order/so_allocation_list.dart | 69 ++++ lib/widget/order/so_line_detail.dart | 2 +- lib/widget/order/so_shipment_detail.dart | 384 ++++++++++++++++++ lib/widget/order/so_shipment_list.dart | 45 +- lib/widget/part/part_detail.dart | 2 +- lib/widget/stock/stock_detail.dart | 2 +- pubspec.yaml | 2 +- 22 files changed, 858 insertions(+), 79 deletions(-) create mode 100644 lib/widget/order/so_allocation_list.dart create mode 100644 lib/widget/order/so_shipment_detail.dart diff --git a/assets/release_notes.md b/assets/release_notes.md index 78696039..28977610 100644 --- a/assets/release_notes.md +++ b/assets/release_notes.md @@ -1,3 +1,11 @@ +### 0.20.0 - October 2025 +--- + +- View pending shipments from the home screen +- Display detail view for shipments +- Adds ability to ship pending outgoing shipments +- Adds ability to mark outgoing shipments as "checked" or "unchecked" + ### 0.19.3 - September 2025 --- diff --git a/lib/api.dart b/lib/api.dart index a63f1ccf..5d79a22a 100644 --- a/lib/api.dart +++ b/lib/api.dart @@ -279,6 +279,8 @@ class InvenTreeAPI { String get username => (userInfo["username"] ?? "") as String; + int get userId => (userInfo["pk"] ?? -1) as int; + // Map of server information Map serverInfo = {}; diff --git a/lib/api_form.dart b/lib/api_form.dart index e227289a..7852c452 100644 --- a/lib/api_form.dart +++ b/lib/api_form.dart @@ -586,6 +586,8 @@ class APIFormField { return InvenTreeSupplierPart().defaultListFilters(); case InvenTreeStockItem.MODEL_TYPE: return InvenTreeStockItem().defaultListFilters(); + case InvenTreeSalesOrder.MODEL_TYPE: + return InvenTreeSalesOrder().defaultListFilters(); default: break; } @@ -727,7 +729,7 @@ class APIFormField { return ListTile( title: Text(shipment.reference), subtitle: Text(shipment.tracking_number), - trailing: shipment.shipped ? Text(shipment.shipment_date!) : null, + trailing: shipment.isShipped ? Text(shipment.shipment_date!) : null, ); case "owner": String name = (data["name"] ?? "") as String; @@ -754,6 +756,15 @@ class APIFormField { subtitle: Text(project_code.description), leading: Icon(TablerIcons.list), ); + case InvenTreeSalesOrder.MODEL_TYPE: + var so = InvenTreeSalesOrder.fromJson(data); + return ListTile( + title: Text(so.reference), + subtitle: Text(so.description), + leading: InvenTreeAPI().getThumbnail( + so.customer?.thumbnail ?? so.customer?.image ?? "", + ), + ); default: return ListTile( title: Text( diff --git a/lib/inventree/model.dart b/lib/inventree/model.dart index 532d1c2e..e08a053e 100644 --- a/lib/inventree/model.dart +++ b/lib/inventree/model.dart @@ -601,7 +601,7 @@ class InvenTreeModel { // POST data to update the model Future update({ - Map values = const {}, + Map values = const {}, int? expectedStatusCode = 200, }) async { var url = path.join(URL, pk.toString()); diff --git a/lib/inventree/sales_order.dart b/lib/inventree/sales_order.dart index 51412dbd..8b661f4a 100644 --- a/lib/inventree/sales_order.dart +++ b/lib/inventree/sales_order.dart @@ -5,6 +5,9 @@ import "package:inventree/helpers.dart"; import "package:inventree/inventree/company.dart"; import "package:inventree/inventree/model.dart"; import "package:inventree/inventree/orders.dart"; +import "package:inventree/inventree/part.dart"; +import "package:inventree/inventree/stock.dart"; +import "package:inventree/widget/order/so_shipment_detail.dart"; import "package:inventree/widget/progress.dart"; import "package:inventree/widget/order/extra_line_detail.dart"; import "package:inventree/widget/order/sales_order_detail.dart"; @@ -269,6 +272,19 @@ class InvenTreeSalesOrderShipment extends InvenTreeModel { @override String get URL => "/order/so/shipment/"; + String get SHIP_SHIPMENT_URL => "/order/so/shipment/${pk}/ship/"; + + @override + Future goToDetailPage(BuildContext context) async { + return Navigator.push( + context, + MaterialPageRoute(builder: (context) => SOShipmentDetailWidget(this)), + ); + } + + @override + List get rolesRequired => ["sales_order"]; + static const String MODEL_TYPE = "salesordershipment"; @override @@ -284,6 +300,18 @@ class InvenTreeSalesOrderShipment extends InvenTreeModel { return fields; } + int get orderId => getInt("order"); + + InvenTreeSalesOrder? get order { + dynamic order_detail = jsondata["order_detail"]; + + if (order_detail == null) { + return null; + } else { + return InvenTreeSalesOrder.fromJson(order_detail as Map); + } + } + String get reference => getString("reference"); String get tracking_number => getString("tracking_number"); @@ -292,7 +320,113 @@ class InvenTreeSalesOrderShipment extends InvenTreeModel { String? get shipment_date => getString("shipment_date"); - bool get shipped => shipment_date != null && shipment_date!.isNotEmpty; + String? get delivery_date => getString("delivery_date"); + + int? get checked_by_id => getInt("checked_by"); + + bool get isChecked => checked_by_id != null && checked_by_id! > 0; + + bool get isShipped => shipment_date != null && shipment_date!.isNotEmpty; + + bool get isDelivered => delivery_date != null && delivery_date!.isNotEmpty; +} + +/* + * Class representing an allocation of stock against a SalesOrderShipment + */ +class InvenTreeSalesOrderAllocation extends InvenTreeAttachment { + InvenTreeSalesOrderAllocation() : super(); + + InvenTreeSalesOrderAllocation.fromJson(Map json) + : super.fromJson(json); + + @override + InvenTreeModel createFromJson(Map json) => + InvenTreeSalesOrderAllocation.fromJson(json); + + @override + String get URL => "/order/so-allocation/"; + + @override + List get rolesRequired => ["sales_order"]; + + @override + Map defaultFilters() { + return { + "part_detail": "true", + "order_detail": "true", + "item_detail": "true", + "location_detail": "true", + }; + } + + static const String MODEL_TYPE = "salesorderallocation"; + + int get orderId => getInt("order"); + + InvenTreeSalesOrder? get order { + dynamic order_detail = jsondata["order_detail"]; + + if (order_detail == null) { + return null; + } else { + return InvenTreeSalesOrder.fromJson(order_detail as Map); + } + } + + int get stockItemId => getInt("item"); + + InvenTreeStockItem? get stockItem { + dynamic item_detail = jsondata["item_detail"]; + + if (item_detail == null) { + return null; + } else { + return InvenTreeStockItem.fromJson(item_detail as Map); + } + } + + int get partId => getInt("part"); + + InvenTreePart? get part { + dynamic part_detail = jsondata["part_detail"]; + + if (part_detail == null) { + return null; + } else { + return InvenTreePart.fromJson(part_detail as Map); + } + } + + int get shipmentId => getInt("shipment"); + + bool get hasShipment => shipmentId > 0; + + InvenTreeSalesOrderShipment? get shipment { + dynamic shipment_detail = jsondata["shipment_detail"]; + + if (shipment_detail == null) { + return null; + } else { + return InvenTreeSalesOrderShipment.fromJson( + shipment_detail as Map, + ); + } + } + + int get locationId => getInt("location"); + + InvenTreeStockLocation? get location { + dynamic location_detail = jsondata["location_detail"]; + + if (location_detail == null) { + return null; + } else { + return InvenTreeStockLocation.fromJson( + location_detail as Map, + ); + } + } } /* @@ -319,3 +453,23 @@ class InvenTreeSalesOrderAttachment extends InvenTreeAttachment { ? "attachment/" : "order/so/attachment/"; } + +class InvenTreeSalesOrderShipmentAttachment extends InvenTreeAttachment { + InvenTreeSalesOrderShipmentAttachment() : super(); + + InvenTreeSalesOrderShipmentAttachment.fromJson(Map json) + : super.fromJson(json); + + @override + InvenTreeModel createFromJson(Map json) => + InvenTreeSalesOrderShipmentAttachment.fromJson(json); + + @override + String get REFERENCE_FIELD => "shipment"; + + @override + String get REF_MODEL_TYPE => "salesordershipment"; + + @override + String get URL => "attachment/"; +} diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index fbac9091..83fef3af 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -65,6 +65,9 @@ "allocateStock": "Allocate Stock", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, + "appReleaseNotes": "Display app release notes", "@appReleaseNotes": {}, @@ -331,6 +334,15 @@ "deleteFailed": "Delete operation failed", "@deleteFailed": {}, + "deleteImageConfirmation": "Are you sure you want to delete this image?", + "@deleteImageConfirmation": {}, + + "deleteImageTooltip": "Delete Image", + "@deleteImageTooltip": {}, + + "deleteImage": "Delete Image", + "@deleteImage": {}, + "deletePart": "Delete Part", "@deletePart": {}, @@ -340,6 +352,9 @@ "deleteSuccess": "Delete operation successful", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, + "description": "Description", "@description": {}, @@ -548,6 +563,12 @@ "homeShowPoDescription": "Show purchase order button on home screen", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, + "homeShowSo": "Show Sales Orders", "@homeShowSo": {}, @@ -647,6 +668,12 @@ "invalidUsernamePassword": "Invalid username / password combination", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, + "issue": "Issue", "@issue": {}, @@ -769,6 +796,12 @@ "@name": { }, + "no": "No", + "@no": {}, + + "notApplicable": "N/A", + "@notApplicable": {}, + "notConnected": "Not Connected", "@notConnected": {}, @@ -780,8 +813,8 @@ "notifications": "Notifications", "@notifications": {}, - "notificationsEmpty": "No unread notifications", - "@notificationsEmpty": {}, + "notificationsEmpty": "No unread notifications", + "@notificationsEmpty": {}, "noResponse": "No Response from Server", "@noResponse": {}, @@ -792,6 +825,12 @@ "noImageAvailable": "No image available", "@noImageAvailable": {}, + "noPricingAvailable": "No pricing available", + "@noPricingAvailable": {}, + + "noPricingDataFound": "No pricing data found for this part", + "@noPricingDataFound": {}, + "noSubcategories": "No Subcategories", "@noSubcategories": {}, @@ -927,6 +966,9 @@ "passwordEmpty": "Password cannot be empty", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, + "permissionAccountDenied": "Your account does not have the required permissions to perform this action", "@permissionAccountDenied": {}, @@ -1186,20 +1228,20 @@ "salesOrders": "Sales Orders", "@salesOrders": {}, - "salesOrderEnable": "Enable Sales Orders", - "@salesOrderEnable": {}, + "salesOrderEnable": "Enable Sales Orders", + "@salesOrderEnable": {}, - "salesOrderEnableDetail": "Enable sales order functionality", - "@salesOrderEnableDetail": {}, + "salesOrderEnableDetail": "Enable sales order functionality", + "@salesOrderEnableDetail": {}, - "salesOrderShowCamera": "Camera Shortcut", - "@salesOrderShowCamera": {}, + "salesOrderShowCamera": "Camera Shortcut", + "@salesOrderShowCamera": {}, - "salesOrderShowCameraDetail": "Enable image upload shortcut on sales order screen", - "@salesOrderShowCameraDetail": {}, + "salesOrderShowCameraDetail": "Enable image upload shortcut on sales order screen", + "@salesOrderShowCameraDetail": {}, "salesOrderSettings": "Sales order settings", - "@salesOrderSettings": {}, + "@salesOrderSettings": {}, "salesOrderCreate": "New Sales Order", "@saleOrderCreate": {}, @@ -1338,12 +1380,48 @@ "serverNotSelected": "Server not selected", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, + "shipments": "Shipments", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, + "shipmentAdd": "Add Shipment", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, + "shipped": "Shipped", "@shipped": {}, @@ -1555,6 +1633,9 @@ "totalPrice": "Total Price", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, + "transfer": "Transfer", "@transfer": { "description": "transfer" @@ -1642,6 +1723,9 @@ "website": "Website", "@website": {}, + "yes": "Yes", + "@yes": {}, + "price": "Price", "@price": {}, @@ -1682,20 +1766,5 @@ "@currency": {}, "priceBreaks": "Price Breaks", - "@priceBreaks": {}, - - "noPricingAvailable": "No pricing available", - "@noPricingAvailable": {}, - - "noPricingDataFound": "No pricing data found for this part", - "@noPricingDataFound": {}, - - "deleteImageConfirmation": "Are you sure you want to delete this image?", - "@deleteImageConfirmation": {}, - - "deleteImageTooltip": "Delete Image", - "@deleteImageTooltip": {}, - - "deleteImage": "Delete Image", - "@deleteImage": {} + "@priceBreaks": {} } diff --git a/lib/preferences.dart b/lib/preferences.dart index e10c3d93..bf0d8ae4 100644 --- a/lib/preferences.dart +++ b/lib/preferences.dart @@ -10,6 +10,7 @@ import "package:path/path.dart"; const String INV_HOME_SHOW_SUBSCRIBED = "homeShowSubscribed"; const String INV_HOME_SHOW_PO = "homeShowPo"; const String INV_HOME_SHOW_SO = "homeShowSo"; +const String INV_HOME_SHOW_SHIPMENTS = "homeShowShipments"; const String INV_HOME_SHOW_MANUFACTURERS = "homeShowManufacturers"; const String INV_HOME_SHOW_CUSTOMERS = "homeShowCustomers"; const String INV_HOME_SHOW_SUPPLIERS = "homeShowSuppliers"; diff --git a/lib/settings/home_settings.dart b/lib/settings/home_settings.dart index 58740d4f..a4da9d20 100644 --- a/lib/settings/home_settings.dart +++ b/lib/settings/home_settings.dart @@ -20,6 +20,7 @@ class _HomeScreenSettingsState extends State { bool homeShowSubscribed = true; bool homeShowPo = true; bool homeShowSo = true; + bool homeShowShipments = true; bool homeShowSuppliers = true; bool homeShowManufacturers = true; bool homeShowCustomers = true; @@ -46,6 +47,11 @@ class _HomeScreenSettingsState extends State { homeShowSo = await InvenTreeSettingsManager().getValue(INV_HOME_SHOW_SO, true) as bool; + + homeShowShipments = + await InvenTreeSettingsManager().getValue(INV_HOME_SHOW_SHIPMENTS, true) + as bool; + homeShowManufacturers = await InvenTreeSettingsManager().getValue( INV_HOME_SHOW_MANUFACTURERS, @@ -118,6 +124,23 @@ class _HomeScreenSettingsState extends State { }, ), ), + ListTile( + title: Text(L10().homeShowShipments), + subtitle: Text(L10().homeShowShipmentsDescription), + leading: Icon(TablerIcons.cube_send), + trailing: Switch( + value: homeShowShipments, + onChanged: (bool value) { + InvenTreeSettingsManager().setValue( + INV_HOME_SHOW_SHIPMENTS, + value, + ); + setState(() { + homeShowShipments = value; + }); + }, + ), + ), ListTile( title: Text(L10().homeShowSuppliers), subtitle: Text(L10().homeShowSuppliersDescription), diff --git a/lib/widget/attachment_widget.dart b/lib/widget/attachment_widget.dart index b4c9746a..b66462f3 100644 --- a/lib/widget/attachment_widget.dart +++ b/lib/widget/attachment_widget.dart @@ -3,7 +3,6 @@ import "dart:io"; import "package:flutter/material.dart"; import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:one_context/one_context.dart"; -import "package:url_launcher/url_launcher.dart"; import "package:inventree/api.dart"; import "package:inventree/l10.dart"; @@ -212,17 +211,14 @@ class _AttachmentWidgetState extends RefreshableState { }, ), ); - } else if (attachment.link.isNotEmpty) { + } else if (attachment.hasLink) { tiles.add( ListTile( title: Text(attachment.link), subtitle: Text(attachment.comment), leading: Icon(TablerIcons.link, color: COLOR_ACTION), onTap: () async { - var uri = Uri.tryParse(attachment.link.trimLeft()); - if (uri != null && await canLaunchUrl(uri)) { - await launchUrl(uri); - } + attachment.openLink(); }, onLongPress: () { showOptionsMenu(context, attachment); diff --git a/lib/widget/company/company_detail.dart b/lib/widget/company/company_detail.dart index 64356d71..5d06e581 100644 --- a/lib/widget/company/company_detail.dart +++ b/lib/widget/company/company_detail.dart @@ -287,7 +287,7 @@ class _CompanyDetailState extends RefreshableState { } // External link - if (widget.company.link.isNotEmpty) { + if (widget.company.hasLink) { tiles.add( ListTile( title: Text(L10().link), diff --git a/lib/widget/company/manufacturer_part_detail.dart b/lib/widget/company/manufacturer_part_detail.dart index 5267a31b..9cc6bc23 100644 --- a/lib/widget/company/manufacturer_part_detail.dart +++ b/lib/widget/company/manufacturer_part_detail.dart @@ -12,7 +12,6 @@ import "package:inventree/inventree/part.dart"; import "package:inventree/widget/refreshable_state.dart"; import "package:inventree/widget/snacks.dart"; import "package:inventree/widget/progress.dart"; -import "package:url_launcher/url_launcher.dart"; /* * Detail widget for viewing a single ManufacturerPart instance @@ -163,16 +162,13 @@ class _ManufacturerPartDisplayState ); } - if (widget.manufacturerPart.link.isNotEmpty) { + if (widget.manufacturerPart.hasLink) { tiles.add( ListTile( title: Text(widget.manufacturerPart.link), leading: Icon(TablerIcons.link, color: COLOR_ACTION), onTap: () async { - var uri = Uri.tryParse(widget.manufacturerPart.link); - if (uri != null && await canLaunchUrl(uri)) { - await launchUrl(uri); - } + widget.manufacturerPart.openLink(); }, ), ); diff --git a/lib/widget/company/supplier_part_detail.dart b/lib/widget/company/supplier_part_detail.dart index 92cf2de6..b2a965fc 100644 --- a/lib/widget/company/supplier_part_detail.dart +++ b/lib/widget/company/supplier_part_detail.dart @@ -2,7 +2,6 @@ import "package:flutter/material.dart"; import "package:flutter_speed_dial/flutter_speed_dial.dart"; import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/widget/link_icon.dart"; -import "package:url_launcher/url_launcher.dart"; import "package:inventree/app_colors.dart"; import "package:inventree/l10.dart"; @@ -239,7 +238,7 @@ class _SupplierPartDisplayState ); } - if (widget.supplierPart.link.isNotEmpty) { + if (widget.supplierPart.hasLink) { tiles.add( ListTile( title: Text(L10().link), @@ -247,10 +246,7 @@ class _SupplierPartDisplayState leading: Icon(TablerIcons.link, color: COLOR_ACTION), trailing: LinkIcon(external: true), onTap: () async { - var uri = Uri.tryParse(widget.supplierPart.link); - if (uri != null && await canLaunchUrl(uri)) { - await launchUrl(uri); - } + widget.supplierPart.openLink(); }, ), ); diff --git a/lib/widget/home.dart b/lib/widget/home.dart index 3b29d868..15c4d3f1 100644 --- a/lib/widget/home.dart +++ b/lib/widget/home.dart @@ -14,6 +14,7 @@ import "package:inventree/preferences.dart"; import "package:inventree/l10.dart"; import "package:inventree/settings/select_server.dart"; import "package:inventree/user_profile.dart"; +import "package:inventree/widget/order/so_shipment_list.dart"; import "package:inventree/widget/part/category_display.dart"; import "package:inventree/widget/drawer.dart"; @@ -55,6 +56,7 @@ class _InvenTreeHomePageState extends State bool homeShowPo = false; bool homeShowSo = false; + bool homeShowShipments = false; bool homeShowSubscribed = false; bool homeShowManufacturers = false; bool homeShowCustomers = false; @@ -112,6 +114,20 @@ class _InvenTreeHomePageState extends State ); } + void _showPendingShipments(BuildContext context) { + if (!InvenTreeAPI().checkConnection()) return; + + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => SOShipmentListWidget( + title: L10().shipmentsPending, + filters: {"order_outstanding": "true", "shipped": "false"}, + ), + ), + ); + } + void _showSuppliers(BuildContext context) { if (!InvenTreeAPI().checkConnection()) return; @@ -167,6 +183,11 @@ class _InvenTreeHomePageState extends State homeShowSo = await InvenTreeSettingsManager().getValue(INV_HOME_SHOW_SO, true) as bool; + + homeShowShipments = + await InvenTreeSettingsManager().getValue(INV_HOME_SHOW_SHIPMENTS, true) + as bool; + homeShowManufacturers = await InvenTreeSettingsManager().getValue( INV_HOME_SHOW_MANUFACTURERS, @@ -325,6 +346,19 @@ class _InvenTreeHomePageState extends State ); } + if (homeShowShipments && InvenTreeSalesOrderShipment().canView) { + tiles.add( + _listTile( + context, + L10().shipmentsPending, + TablerIcons.cube_send, + callback: () { + _showPendingShipments(context); + }, + ), + ); + } + // Suppliers if (homeShowSuppliers && InvenTreePurchaseOrder().canView) { tiles.add( diff --git a/lib/widget/order/po_line_detail.dart b/lib/widget/order/po_line_detail.dart index 7faf4975..16bac283 100644 --- a/lib/widget/order/po_line_detail.dart +++ b/lib/widget/order/po_line_detail.dart @@ -241,7 +241,7 @@ class _POLineDetailWidgetState extends RefreshableState { } // External link - if (widget.item.link.isNotEmpty) { + if (widget.item.hasLink) { tiles.add( ListTile( title: Text(L10().link), diff --git a/lib/widget/order/sales_order_detail.dart b/lib/widget/order/sales_order_detail.dart index bc23961e..ec18561c 100644 --- a/lib/widget/order/sales_order_detail.dart +++ b/lib/widget/order/sales_order_detail.dart @@ -375,24 +375,7 @@ class _SalesOrderDetailState extends RefreshableState { Color lineColor = widget.order.complete ? COLOR_SUCCESS : COLOR_WARNING; - // Shipment progress - if (widget.order.shipmentCount > 0) { - tiles.add( - ListTile( - title: Text(L10().shipments), - subtitle: ProgressBar( - widget.order.completedShipmentCount.toDouble(), - maximum: widget.order.shipmentCount.toDouble(), - ), - leading: Icon(TablerIcons.truck_delivery), - trailing: LargeText( - "${widget.order.completedShipmentCount} / ${widget.order.shipmentCount}", - color: lineColor, - ), - ), - ); - } - + // Line items progress tiles.add( ListTile( title: Text(L10().lineItems), @@ -408,6 +391,24 @@ class _SalesOrderDetailState extends RefreshableState { ), ); + // Shipment progress + if (widget.order.shipmentCount > 0) { + tiles.add( + ListTile( + title: Text(L10().shipments), + subtitle: ProgressBar( + widget.order.completedShipmentCount.toDouble(), + maximum: widget.order.shipmentCount.toDouble(), + ), + leading: Icon(TablerIcons.cube_send), + trailing: LargeText( + "${widget.order.completedShipmentCount} / ${widget.order.shipmentCount}", + color: lineColor, + ), + ), + ); + } + // Extra line items tiles.add( ListTile( @@ -522,8 +523,8 @@ class _SalesOrderDetailState extends RefreshableState { List getTabIcons(BuildContext context) { return [ Tab(text: L10().details), - Tab(text: L10().shipments), Tab(text: L10().lineItems), + Tab(text: L10().shipments), ]; } @@ -531,8 +532,8 @@ class _SalesOrderDetailState extends RefreshableState { List getTabs(BuildContext context) { return [ ListView(children: orderTiles(context)), - PaginatedSOShipmentList({"order": widget.order.pk.toString()}), PaginatedSOLineList({"order": widget.order.pk.toString()}), + PaginatedSOShipmentList({"order": widget.order.pk.toString()}), ]; } } diff --git a/lib/widget/order/so_allocation_list.dart b/lib/widget/order/so_allocation_list.dart new file mode 100644 index 00000000..5076f071 --- /dev/null +++ b/lib/widget/order/so_allocation_list.dart @@ -0,0 +1,69 @@ +import "package:flutter/material.dart"; +import "package:inventree/api.dart"; +import "package:inventree/inventree/model.dart"; +import "package:inventree/inventree/part.dart"; +import "package:inventree/inventree/sales_order.dart"; +import "package:inventree/inventree/stock.dart"; +import "package:inventree/l10.dart"; +import "package:inventree/widget/link_icon.dart"; +import "package:inventree/widget/paginator.dart"; + +class PaginatedSOAllocationList extends PaginatedSearchWidget { + const PaginatedSOAllocationList(Map filters) + : super(filters: filters); + + @override + String get searchTitle => L10().allocatedStock; + + @override + _PaginatedSOAllocationListState createState() => + _PaginatedSOAllocationListState(); +} + +class _PaginatedSOAllocationListState + extends PaginatedSearchState { + _PaginatedSOAllocationListState() : super(); + + @override + String get prefix => "so_allocation_"; + + @override + Map get orderingOptions => {}; + + @override + Map> get filterOptions => {}; + + @override + Future requestPage( + int limit, + int offset, + Map params, + ) async { + final page = await InvenTreeSalesOrderAllocation().listPaginated( + limit, + offset, + filters: params, + ); + + return page; + } + + @override + Widget buildItem(BuildContext context, InvenTreeModel model) { + InvenTreeSalesOrderAllocation allocation = + model as InvenTreeSalesOrderAllocation; + + InvenTreePart? part = allocation.part; + InvenTreeStockItem? stockItem = allocation.stockItem; + + return ListTile( + title: Text(part?.fullname ?? ""), + subtitle: Text(part?.description ?? ""), + onTap: () async { + stockItem?.goToDetailPage(context); + }, + leading: InvenTreeAPI().getThumbnail(allocation.part?.thumbnail ?? ""), + trailing: LargeText(stockItem?.serialOrQuantityDisplay() ?? ""), + ); + } +} diff --git a/lib/widget/order/so_line_detail.dart b/lib/widget/order/so_line_detail.dart index ae0d3025..bc6fd6fe 100644 --- a/lib/widget/order/so_line_detail.dart +++ b/lib/widget/order/so_line_detail.dart @@ -244,7 +244,7 @@ class _SOLineDetailWidgetState extends RefreshableState { } // External link - if (widget.item.link.isNotEmpty) { + if (widget.item.hasLink) { tiles.add( ListTile( title: Text(L10().link), diff --git a/lib/widget/order/so_shipment_detail.dart b/lib/widget/order/so_shipment_detail.dart new file mode 100644 index 00000000..9116fb7f --- /dev/null +++ b/lib/widget/order/so_shipment_detail.dart @@ -0,0 +1,384 @@ +/* + * Widget for displaying detail view of a single SalesOrderShipment + */ + +import "package:flutter/material.dart"; +import "package:flutter_speed_dial/flutter_speed_dial.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; +import "package:inventree/api.dart"; +import "package:inventree/api_form.dart"; +import "package:inventree/app_colors.dart"; +import "package:inventree/inventree/sales_order.dart"; +import "package:inventree/l10.dart"; +import "package:inventree/preferences.dart"; +import "package:inventree/widget/attachment_widget.dart"; +import "package:inventree/widget/link_icon.dart"; +import "package:inventree/widget/notes_widget.dart"; +import "package:inventree/widget/order/so_allocation_list.dart"; +import "package:inventree/widget/refreshable_state.dart"; +import "package:inventree/widget/snacks.dart"; + +class SOShipmentDetailWidget extends StatefulWidget { + const SOShipmentDetailWidget(this.shipment, {Key? key}) : super(key: key); + + final InvenTreeSalesOrderShipment shipment; + + @override + _SOShipmentDetailWidgetState createState() => _SOShipmentDetailWidgetState(); +} + +class _SOShipmentDetailWidgetState + extends RefreshableState { + _SOShipmentDetailWidgetState(); + + // The SalesOrder associated with this shipment + InvenTreeSalesOrder? order; + + int attachmentCount = 0; + bool showCameraShortcut = true; + + @override + String getAppBarTitle() => L10().shipment; + + @override + List appBarActions(BuildContext context) { + List actions = []; + + if (widget.shipment.canEdit) { + actions.add( + IconButton( + icon: Icon(TablerIcons.edit), + onPressed: () { + _editShipment(context); + }, + ), + ); + } + + return actions; + } + + Future _editShipment(BuildContext context) async { + var fields = widget.shipment.formFields(); + + fields["order"]?["hidden"] = true; + + widget.shipment.editForm( + context, + L10().shipmentEdit, + fields: fields, + onSuccess: (data) async { + refresh(context); + showSnackIcon(L10().shipmentUpdated, success: true); + }, + ); + } + + @override + Future request(BuildContext context) async { + await widget.shipment.reload(); + + showCameraShortcut = await InvenTreeSettingsManager().getBool( + INV_SO_SHOW_CAMERA, + true, + ); + + final so = await InvenTreeSalesOrder().get(widget.shipment.orderId); + + if (mounted) { + setState(() { + order = (so is InvenTreeSalesOrder ? so : null); + }); + } + + InvenTreeSalesOrderShipmentAttachment() + .countAttachments(widget.shipment.pk) + .then((int value) { + if (mounted) { + setState(() { + attachmentCount = value; + }); + } + }); + } + + /// Upload an image for this shipment + Future _uploadImage(BuildContext context) async { + InvenTreeSalesOrderShipmentAttachment() + .uploadImage(widget.shipment.pk, prefix: widget.shipment.reference) + .then((result) => refresh(context)); + } + + /// Mark this shipment as shipped + Future _sendShipment(BuildContext context) async { + Map fields = { + "shipment_date": { + "value": widget.shipment.isShipped + ? widget.shipment.shipment_date! + : DateTime.now().toIso8601String().split("T").first, + }, + "tracking_number": {"value": widget.shipment.tracking_number}, + "invoice_number": {"value": widget.shipment.invoice_number}, + }; + + launchApiForm( + context, + L10().shipmentSend, + widget.shipment.SHIP_SHIPMENT_URL, + fields, + method: "POST", + onSuccess: (data) { + refresh(context); + showSnackIcon(L10().shipmentUpdated, success: true); + }, + ); + } + + @override + List actionButtons(BuildContext context) { + List actions = []; + + if (!widget.shipment.canEdit) { + // Exit early if we do not have edit permissions + return actions; + } + + if (showCameraShortcut) { + actions.add( + SpeedDialChild( + child: Icon(TablerIcons.camera, color: Colors.blue), + label: L10().takePicture, + onTap: () async { + _uploadImage(context); + }, + ), + ); + } + + // Check shipment + if (!widget.shipment.isChecked && !widget.shipment.isShipped) { + actions.add( + SpeedDialChild( + child: Icon(TablerIcons.check, color: Colors.green), + label: L10().shipmentCheck, + onTap: () async { + widget.shipment + .update(values: {"checked_by": InvenTreeAPI().userId}) + .then((_) { + showSnackIcon(L10().shipmentUpdated, success: true); + refresh(context); + }); + }, + ), + ); + } + + // Uncheck shipment + if (widget.shipment.isChecked && !widget.shipment.isShipped) { + actions.add( + SpeedDialChild( + child: Icon(TablerIcons.x, color: Colors.red), + label: L10().shipmentUncheck, + onTap: () async { + widget.shipment.update(values: {"checked_by": null}).then((_) { + showSnackIcon(L10().shipmentUpdated, success: true); + refresh(context); + }); + }, + ), + ); + } + + // Send shipment + if (!widget.shipment.isShipped) { + actions.add( + SpeedDialChild( + child: Icon(TablerIcons.truck_delivery, color: Colors.green), + label: L10().shipmentSend, + onTap: () async { + _sendShipment(context); + }, + ), + ); + } + + // TODO: Cancel shipment + + return actions; + } + + List shipmentTiles(BuildContext context) { + List tiles = []; + + final bool checked = widget.shipment.isChecked; + final bool shipped = widget.shipment.isShipped; + final bool delivered = widget.shipment.isDelivered; + + // Order information + if (order != null) { + // Add SalesOrder information + + tiles.add( + Card( + child: ListTile( + title: Text(order!.reference), + subtitle: Text(order!.description), + leading: api.getThumbnail(order!.customer?.thumbnail ?? ""), + trailing: LargeText( + api.SalesOrderStatus.label(order!.status), + color: api.SalesOrderStatus.color(order!.status), + ), + onTap: () { + order!.goToDetailPage(context); + }, + ), + ), + ); + } + + // Shipment reference number + tiles.add( + ListTile( + title: Text(L10().shipmentReference), + trailing: LargeText(widget.shipment.reference), + leading: Icon(TablerIcons.hash), + ), + ); + + if (widget.shipment.invoice_number.isNotEmpty) { + tiles.add( + ListTile( + title: Text(L10().invoiceNumber), + trailing: LargeText(widget.shipment.invoice_number), + leading: Icon(TablerIcons.invoice), + ), + ); + } + + // Tracking Number + if (widget.shipment.tracking_number.isNotEmpty) { + tiles.add( + ListTile( + title: Text(L10().trackingNumber), + trailing: LargeText(widget.shipment.tracking_number), + leading: Icon(TablerIcons.truck_delivery), + ), + ); + } + + if (checked || !shipped) { + tiles.add( + ListTile( + title: Text(L10().shipmentChecked), + trailing: LargeText( + checked ? L10().yes : L10().no, + color: checked ? COLOR_SUCCESS : COLOR_WARNING, + ), + leading: Icon( + checked ? TablerIcons.circle_check : TablerIcons.circle_x, + color: checked ? COLOR_SUCCESS : COLOR_WARNING, + ), + ), + ); + } + + tiles.add( + ListTile( + title: Text(L10().shipmentDate), + trailing: LargeText( + shipped ? widget.shipment.shipment_date! : L10().notApplicable, + ), + leading: Icon( + shipped ? TablerIcons.calendar_check : TablerIcons.calendar_cancel, + color: shipped ? COLOR_SUCCESS : COLOR_WARNING, + ), + ), + ); + + tiles.add( + ListTile( + title: Text(L10().deliveryDate), + trailing: LargeText( + delivered ? widget.shipment.delivery_date! : L10().notApplicable, + ), + leading: Icon( + delivered ? TablerIcons.calendar_check : TablerIcons.calendar_cancel, + color: delivered ? COLOR_SUCCESS : COLOR_WARNING, + ), + ), + ); + + // External link + if (widget.shipment.hasLink) { + tiles.add( + ListTile( + title: Text(L10().link), + leading: Icon(TablerIcons.link, color: COLOR_ACTION), + trailing: LinkIcon(), + onTap: () async { + widget.shipment.openLink(); + }, + ), + ); + } + + // Notes tile + tiles.add( + ListTile( + title: Text(L10().notes), + leading: Icon(TablerIcons.note, color: COLOR_ACTION), + trailing: LinkIcon(), + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => NotesWidget(widget.shipment), + ), + ); + }, + ), + ); + + // Attachments + tiles.add( + ListTile( + title: Text(L10().attachments), + leading: Icon(TablerIcons.file, color: COLOR_ACTION), + trailing: LinkIcon( + text: attachmentCount > 0 ? attachmentCount.toString() : null, + ), + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => AttachmentWidget( + InvenTreeSalesOrderShipmentAttachment(), + widget.shipment.pk, + widget.shipment.reference, + widget.shipment.canEdit, + ), + ), + ); + }, + ), + ); + + return tiles; + } + + @override + List getTabIcons(BuildContext context) { + return [Tab(text: L10().details), Tab(text: L10().allocatedStock)]; + } + + @override + List getTabs(BuildContext context) { + return [ + ListView(children: shipmentTiles(context)), + PaginatedSOAllocationList({ + "order": widget.shipment.orderId.toString(), + "shipment": widget.shipment.pk.toString(), + }), + ]; + } +} diff --git a/lib/widget/order/so_shipment_list.dart b/lib/widget/order/so_shipment_list.dart index 126e247e..221d7485 100644 --- a/lib/widget/order/so_shipment_list.dart +++ b/lib/widget/order/so_shipment_list.dart @@ -7,6 +7,35 @@ import "package:inventree/widget/paginator.dart"; import "package:inventree/inventree/model.dart"; import "package:inventree/l10.dart"; +import "package:inventree/widget/refreshable_state.dart"; + +class SOShipmentListWidget extends StatefulWidget { + const SOShipmentListWidget({ + this.title = "", + this.filters = const {}, + Key? key, + }) : super(key: key); + + final Map filters; + + final String title; + + @override + _SOShipmentListWidgetState createState() => _SOShipmentListWidgetState(); +} + +class _SOShipmentListWidgetState + extends RefreshableState { + _SOShipmentListWidgetState(); + + @override + String getAppBarTitle() => widget.title; + + @override + Widget getBody(BuildContext context) { + return PaginatedSOShipmentList(widget.filters); + } +} class PaginatedSOShipmentList extends PaginatedSearchWidget { const PaginatedSOShipmentList(Map filters) @@ -51,15 +80,21 @@ class _PaginatedSOShipmentListState Widget buildItem(BuildContext context, InvenTreeModel model) { InvenTreeSalesOrderShipment shipment = model as InvenTreeSalesOrderShipment; + InvenTreeSalesOrder? order = shipment.order; return ListTile( - title: Text(shipment.reference), - subtitle: Text(shipment.tracking_number), - leading: shipment.shipped + title: Text( + "${order?.reference ?? L10().salesOrder} - ${shipment.reference}", + ), + subtitle: Text(order?.description ?? L10().description), + onTap: () async { + shipment.goToDetailPage(context); + }, + leading: shipment.isShipped ? Icon(TablerIcons.calendar_check, color: COLOR_SUCCESS) : Icon(TablerIcons.calendar_cancel, color: COLOR_WARNING), - trailing: shipment.shipped + trailing: shipment.isShipped ? LargeText(shipment.shipment_date ?? "") - : null, + : LargeText(L10().pending), ); } } diff --git a/lib/widget/part/part_detail.dart b/lib/widget/part/part_detail.dart index 5d59aeda..e6c7d6e6 100644 --- a/lib/widget/part/part_detail.dart +++ b/lib/widget/part/part_detail.dart @@ -524,7 +524,7 @@ class _PartDisplayState extends RefreshableState { } // External link? - if (part.link.isNotEmpty) { + if (part.hasLink) { tiles.add( ListTile( title: Text("${part.link}"), diff --git a/lib/widget/stock/stock_detail.dart b/lib/widget/stock/stock_detail.dart index e91bd989..19f1592e 100644 --- a/lib/widget/stock/stock_detail.dart +++ b/lib/widget/stock/stock_detail.dart @@ -750,7 +750,7 @@ class _StockItemDisplayState extends RefreshableState { ); } - if (widget.item.link.isNotEmpty) { + if (widget.item.hasLink) { tiles.add( ListTile( title: Text("${widget.item.link}"), diff --git a/pubspec.yaml b/pubspec.yaml index 0b9b3d55..92de2677 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: inventree description: InvenTree stock management -version: 0.19.3+102 +version: 0.20.0+103 environment: sdk: ^3.8.1 From a078a9d12655b4ff8a59c81eab019d645d06ef37 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 24 Oct 2025 13:48:10 +1100 Subject: [PATCH 09/40] Update release notes (#698) --- assets/release_notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/assets/release_notes.md b/assets/release_notes.md index 28977610..30206617 100644 --- a/assets/release_notes.md +++ b/assets/release_notes.md @@ -5,6 +5,7 @@ - Display detail view for shipments - Adds ability to ship pending outgoing shipments - Adds ability to mark outgoing shipments as "checked" or "unchecked" +- Updated translations ### 0.19.3 - September 2025 --- From 4a094f4a773bfb940bc240b7733efc120aa6924c Mon Sep 17 00:00:00 2001 From: Oliver Date: Sun, 26 Oct 2025 18:41:29 +1100 Subject: [PATCH 10/40] New Crowdin updates (#699) * New translations app_en.arb (Russian) * New translations app_en.arb (Ukrainian) * New translations app_en.arb (Indonesian) * New translations app_en.arb (Vietnamese) * New translations app_en.arb (Romanian) * New translations app_en.arb (French) * New translations app_en.arb (Spanish) * New translations app_en.arb (Arabic) * New translations app_en.arb (Bulgarian) * New translations app_en.arb (Czech) * New translations app_en.arb (Danish) * New translations app_en.arb (German) * New translations app_en.arb (Greek) * New translations app_en.arb (Finnish) * New translations app_en.arb (Hebrew) * New translations app_en.arb (Hungarian) * New translations app_en.arb (Italian) * New translations app_en.arb (Japanese) * New translations app_en.arb (Korean) * New translations app_en.arb (Lithuanian) * New translations app_en.arb (Dutch) * New translations app_en.arb (Norwegian) * New translations app_en.arb (Polish) * New translations app_en.arb (Portuguese) * New translations app_en.arb (Slovak) * New translations app_en.arb (Slovenian) * New translations app_en.arb (Swedish) * New translations app_en.arb (Turkish) * New translations app_en.arb (Chinese Simplified) * New translations app_en.arb (Chinese Traditional) * New translations app_en.arb (Portuguese, Brazilian) * New translations app_en.arb (Persian) * New translations app_en.arb (Spanish, Mexico) * New translations app_en.arb (Thai) * New translations app_en.arb (Estonian) * New translations app_en.arb (Latvian) * New translations app_en.arb (Hindi) * New translations app_en.arb (Serbian (Latin)) --- lib/l10n/ar_SA/app_ar_SA.arb | 68 +++++++++++++++--- lib/l10n/bg_BG/app_bg_BG.arb | 68 +++++++++++++++--- lib/l10n/cs_CZ/app_cs_CZ.arb | 68 +++++++++++++++--- lib/l10n/da_DK/app_da_DK.arb | 68 +++++++++++++++--- lib/l10n/de_DE/app_de_DE.arb | 68 +++++++++++++++--- lib/l10n/el_GR/app_el_GR.arb | 68 +++++++++++++++--- lib/l10n/es_ES/app_es_ES.arb | 68 +++++++++++++++--- lib/l10n/es_MX/app_es_MX.arb | 68 +++++++++++++++--- lib/l10n/et_EE/app_et_EE.arb | 68 +++++++++++++++--- lib/l10n/fa_IR/app_fa_IR.arb | 68 +++++++++++++++--- lib/l10n/fi_FI/app_fi_FI.arb | 68 +++++++++++++++--- lib/l10n/fr_FR/app_fr_FR.arb | 68 +++++++++++++++--- lib/l10n/he_IL/app_he_IL.arb | 68 +++++++++++++++--- lib/l10n/hi_IN/app_hi_IN.arb | 68 +++++++++++++++--- lib/l10n/hu_HU/app_hu_HU.arb | 68 +++++++++++++++--- lib/l10n/id_ID/app_id_ID.arb | 68 +++++++++++++++--- lib/l10n/it_IT/app_it_IT.arb | 68 +++++++++++++++--- lib/l10n/ja_JP/app_ja_JP.arb | 68 +++++++++++++++--- lib/l10n/ko_KR/app_ko_KR.arb | 136 +++++++++++++++++++++++------------ lib/l10n/lt_LT/app_lt_LT.arb | 68 +++++++++++++++--- lib/l10n/lv_LV/app_lv_LV.arb | 68 +++++++++++++++--- lib/l10n/nl_NL/app_nl_NL.arb | 68 +++++++++++++++--- lib/l10n/no_NO/app_no_NO.arb | 68 +++++++++++++++--- lib/l10n/pl_PL/app_pl_PL.arb | 68 +++++++++++++++--- lib/l10n/pt_BR/app_pt_BR.arb | 68 +++++++++++++++--- lib/l10n/pt_PT/app_pt_PT.arb | 68 +++++++++++++++--- lib/l10n/ro_RO/app_ro_RO.arb | 68 +++++++++++++++--- lib/l10n/ru_RU/app_ru_RU.arb | 68 +++++++++++++++--- lib/l10n/sk_SK/app_sk_SK.arb | 68 +++++++++++++++--- lib/l10n/sl_SI/app_sl_SI.arb | 68 +++++++++++++++--- lib/l10n/sr_CS/app_sr_CS.arb | 68 +++++++++++++++--- lib/l10n/sv_SE/app_sv_SE.arb | 68 +++++++++++++++--- lib/l10n/th_TH/app_th_TH.arb | 70 ++++++++++++++---- lib/l10n/tr_TR/app_tr_TR.arb | 68 +++++++++++++++--- lib/l10n/uk_UA/app_uk_UA.arb | 68 +++++++++++++++--- lib/l10n/vi_VN/app_vi_VN.arb | 68 +++++++++++++++--- lib/l10n/zh_CN/app_zh_CN.arb | 68 +++++++++++++++--- lib/l10n/zh_TW/app_zh_TW.arb | 68 +++++++++++++++--- 38 files changed, 2201 insertions(+), 453 deletions(-) diff --git a/lib/l10n/ar_SA/app_ar_SA.arb b/lib/l10n/ar_SA/app_ar_SA.arb index b66d8f88..c91a4af4 100644 --- a/lib/l10n/ar_SA/app_ar_SA.arb +++ b/lib/l10n/ar_SA/app_ar_SA.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Allocate Stock", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "Display app release notes", "@appReleaseNotes": {}, "appSettings": "App Settings", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Delete operation failed", "@deleteFailed": {}, + "deleteImageConfirmation": "Are you sure you want to delete this image?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Delete Image", + "@deleteImageTooltip": {}, + "deleteImage": "Delete Image", + "@deleteImage": {}, "deletePart": "Delete Part", "@deletePart": {}, "deletePartDetail": "Remove this part from the database", "@deletePartDetail": {}, "deleteSuccess": "Delete operation successful", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Description", "@description": {}, "destination": "Destination", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Show purchase order button on home screen", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Show Sales Orders", "@homeShowSo": {}, "homeShowSoDescription": "Show sales order button on home screen", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Invalid username / password combination", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Issue", "@issue": {}, "issueDate": "Issue Date", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Name", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Not Connected", "@notConnected": {}, "notes": "Notes", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "No image available", "@noImageAvailable": {}, + "noPricingAvailable": "No pricing available", + "@noPricingAvailable": {}, + "noPricingDataFound": "No pricing data found for this part", + "@noPricingDataFound": {}, "noSubcategories": "No Subcategories", "@noSubcategories": {}, "noSubcategoriesAvailable": "No subcategories available", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "Password cannot be empty", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "Your account does not have the required permissions to perform this action", "@permissionAccountDenied": {}, "permissionRequired": "Permission Required", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Server not selected", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Shipments", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Add Shipment", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Shipped", "@shipped": {}, "sku": "SKU", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Total Price", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Transfer", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Website", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Price", "@price": {}, "priceRange": "Price Range", @@ -1141,15 +1197,5 @@ "currency": "Currency", "@currency": {}, "priceBreaks": "Price Breaks", - "@priceBreaks": {}, - "noPricingAvailable": "No pricing available", - "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", - "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/bg_BG/app_bg_BG.arb b/lib/l10n/bg_BG/app_bg_BG.arb index 26b3b50e..aaa8f5c3 100644 --- a/lib/l10n/bg_BG/app_bg_BG.arb +++ b/lib/l10n/bg_BG/app_bg_BG.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Allocate Stock", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "Display app release notes", "@appReleaseNotes": {}, "appSettings": "App Settings", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Delete operation failed", "@deleteFailed": {}, + "deleteImageConfirmation": "Are you sure you want to delete this image?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Delete Image", + "@deleteImageTooltip": {}, + "deleteImage": "Delete Image", + "@deleteImage": {}, "deletePart": "Delete Part", "@deletePart": {}, "deletePartDetail": "Remove this part from the database", "@deletePartDetail": {}, "deleteSuccess": "Delete operation successful", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Description", "@description": {}, "destination": "Destination", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Show purchase order button on home screen", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Show Sales Orders", "@homeShowSo": {}, "homeShowSoDescription": "Show sales order button on home screen", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Invalid username / password combination", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Issue", "@issue": {}, "issueDate": "Issue Date", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Name", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Not Connected", "@notConnected": {}, "notes": "Notes", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "No image available", "@noImageAvailable": {}, + "noPricingAvailable": "No pricing available", + "@noPricingAvailable": {}, + "noPricingDataFound": "No pricing data found for this part", + "@noPricingDataFound": {}, "noSubcategories": "No Subcategories", "@noSubcategories": {}, "noSubcategoriesAvailable": "No subcategories available", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "Password cannot be empty", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "Your account does not have the required permissions to perform this action", "@permissionAccountDenied": {}, "permissionRequired": "Permission Required", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Server not selected", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Shipments", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Add Shipment", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Shipped", "@shipped": {}, "sku": "SKU", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Total Price", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Transfer", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Website", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Price", "@price": {}, "priceRange": "Price Range", @@ -1141,15 +1197,5 @@ "currency": "Currency", "@currency": {}, "priceBreaks": "Price Breaks", - "@priceBreaks": {}, - "noPricingAvailable": "No pricing available", - "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", - "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/cs_CZ/app_cs_CZ.arb b/lib/l10n/cs_CZ/app_cs_CZ.arb index ecd7afef..6d055821 100644 --- a/lib/l10n/cs_CZ/app_cs_CZ.arb +++ b/lib/l10n/cs_CZ/app_cs_CZ.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Přidělit zásoby", "@allocateStock": {}, + "allocatedStock": "Přidělené zásoby", + "@allocatedStock": {}, "appReleaseNotes": "Zobrazit poznámky k verzi aplikace", "@appReleaseNotes": {}, "appSettings": "Nastavení aplikace", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Odstranění se nezdařilo", "@deleteFailed": {}, + "deleteImageConfirmation": "Opravdu chcete odstranit tento obrázek?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Smazat obrázek", + "@deleteImageTooltip": {}, + "deleteImage": "Smazat obrázek", + "@deleteImage": {}, "deletePart": "Odstranit díl", "@deletePart": {}, "deletePartDetail": "Odstranit tento díl z databáze", "@deletePartDetail": {}, "deleteSuccess": "Odstránění bylo úspěšné", "@deleteSuccess": {}, + "deliveryDate": "Datum dodání", + "@deliveryDate": {}, "description": "Popis", "@description": {}, "destination": "Místo určení", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Zobrazit tlačítko pro objednávku na domovské obrazovce", "@homeShowPoDescription": {}, + "homeShowShipments": "Zobrazit zásilky", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Zobrazit čekající zásilky na domovské stránce", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Zobrazit prodejní objednávky", "@homeShowSo": {}, "homeShowSoDescription": "Zobrazit tlačítko pro objednávku na domovské obrazovce", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Neplatné uživatelské jméno nebo heslo.", "@invalidUsernamePassword": {}, + "invoice": "Faktura", + "@invoice": {}, + "invoiceNumber": "Číslo faktury", + "@invoiceNumber": {}, "issue": "Vystavit", "@issue": {}, "issueDate": "Datum nahlášení", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Jméno", "@name": {}, + "no": "Ne", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Nepřipojeno", "@notConnected": {}, "notes": "Poznámky", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "Obrázek není k dispozici", "@noImageAvailable": {}, + "noPricingAvailable": "Žádné ceny nejsou k dispozici", + "@noPricingAvailable": {}, + "noPricingDataFound": "Pro tuto komponentu nebyly nalezeny žádné cenové údaje", + "@noPricingDataFound": {}, "noSubcategories": "Žádná podkategorie", "@noSubcategories": {}, "noSubcategoriesAvailable": "Žádné podkategorie nejsou k dispozici", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "Heslo nemůže být prázdné", "@passwordEmpty": {}, + "pending": "Čekající", + "@pending": {}, "permissionAccountDenied": "Váš účet nemá potřebná oprávnění k provedení této akce", "@permissionAccountDenied": {}, "permissionRequired": "Vyžadováno oprávnění", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Server není vybrán", "@serverNotSelected": {}, + "shipment": "Zásilka", + "@shipment": {}, "shipments": "Dodávky", "@shipments": {}, + "shipmentsPending": "Čekající zásilky", + "@shipmentsPending": {}, "shipmentAdd": "Přidat dodávku", "@shipmentAdd": {}, + "shipmentCheck": "Zkontrolovat zásilku", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Označit tuto zásilku jako zkontrolovanou", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Zásilka zkontrolována", + "@shipmentChecked": {}, + "shipmentDate": "Datum odeslání", + "@shipmentDate": {}, + "shipmentEdit": "Upravit zásilku", + "@shipmentEdit": {}, + "shipmentReference": "Referenční číslo zásilky", + "@shipmentReference": {}, + "shipmentSend": "Odeslat zásilku", + "@shipmentSend": {}, + "shipmentUncheck": "Odznačit zásilku", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Označit tuto zásilku jako odznačenou", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Zásilka aktualizována", + "@shipmentUpdated": {}, "shipped": "Odesláno", "@shipped": {}, "sku": "Číslo zboží (SKU)", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Celková cena", "@totalPrice": {}, + "trackingNumber": "Sledovací číslo", + "@trackingNumber": {}, "transfer": "Převod", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Webová stránka", "@website": {}, + "yes": "Ano", + "@yes": {}, "price": "Cena", "@price": {}, "priceRange": "Cenový rozsah", @@ -1141,15 +1197,5 @@ "currency": "Měna", "@currency": {}, "priceBreaks": "Cena sleva", - "@priceBreaks": {}, - "noPricingAvailable": "Žádné ceny nejsou k dispozici", - "@noPricingAvailable": {}, - "noPricingDataFound": "Pro tuto komponentu nebyly nalezeny žádné cenové údaje", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Opravdu chcete odstranit tento obrázek?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Smazat obrázek", - "@deleteImageTooltip": {}, - "deleteImage": "Smazat obrázek", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/da_DK/app_da_DK.arb b/lib/l10n/da_DK/app_da_DK.arb index 9f583987..7683b84d 100644 --- a/lib/l10n/da_DK/app_da_DK.arb +++ b/lib/l10n/da_DK/app_da_DK.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Tildel lager", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "Vis app-udgivelsesnoter", "@appReleaseNotes": {}, "appSettings": "Appindstillinger", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Delete operation failed", "@deleteFailed": {}, + "deleteImageConfirmation": "Are you sure you want to delete this image?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Delete Image", + "@deleteImageTooltip": {}, + "deleteImage": "Delete Image", + "@deleteImage": {}, "deletePart": "Delete Part", "@deletePart": {}, "deletePartDetail": "Remove this part from the database", "@deletePartDetail": {}, "deleteSuccess": "Sletning lykkedes", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Beskrivelse", "@description": {}, "destination": "Destination", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Vis indkøbsordreknap på startskærmen", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Show Sales Orders", "@homeShowSo": {}, "homeShowSoDescription": "Show sales order button on home screen", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Ugyldigt brugernavn/adgangskode-kombination", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Issue", "@issue": {}, "issueDate": "Issue Date", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Name", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Not Connected", "@notConnected": {}, "notes": "Notes", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "No image available", "@noImageAvailable": {}, + "noPricingAvailable": "No pricing available", + "@noPricingAvailable": {}, + "noPricingDataFound": "No pricing data found for this part", + "@noPricingDataFound": {}, "noSubcategories": "No Subcategories", "@noSubcategories": {}, "noSubcategoriesAvailable": "No subcategories available", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "Password cannot be empty", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "Your account does not have the required permissions to perform this action", "@permissionAccountDenied": {}, "permissionRequired": "Permission Required", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Server not selected", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Shipments", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Add Shipment", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Shipped", "@shipped": {}, "sku": "SKU", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Total Price", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Transfer", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Website", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Price", "@price": {}, "priceRange": "Price Range", @@ -1141,15 +1197,5 @@ "currency": "Currency", "@currency": {}, "priceBreaks": "Price Breaks", - "@priceBreaks": {}, - "noPricingAvailable": "No pricing available", - "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", - "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/de_DE/app_de_DE.arb b/lib/l10n/de_DE/app_de_DE.arb index 3bb7820c..172b055c 100644 --- a/lib/l10n/de_DE/app_de_DE.arb +++ b/lib/l10n/de_DE/app_de_DE.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Bestand zuweisen", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "App-Versionshinweise anzeigen", "@appReleaseNotes": {}, "appSettings": "App-Einstellungen", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Löschvorgang fehlgeschlagen", "@deleteFailed": {}, + "deleteImageConfirmation": "Möchten Sie dieses Bild wirklich löschen?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Bild löschen", + "@deleteImageTooltip": {}, + "deleteImage": "Bild löschen", + "@deleteImage": {}, "deletePart": "Teil löschen", "@deletePart": {}, "deletePartDetail": "Dieses Teil aus der Datenbank löschen", "@deletePartDetail": {}, "deleteSuccess": "Löschvorgang erfolgreich", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Beschreibung", "@description": {}, "destination": "Zielort", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Bestellungen auf Startseite anzeigen", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Aufträge anzeigen", "@homeShowSo": {}, "homeShowSoDescription": "Verkaufsknopf auf dem Startbildschirm anzeigen", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Ungültige Kombination aus Benutzername und Passwort", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Aufgeben", "@issue": {}, "issueDate": "Ausstellungsdatum", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Name", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Nicht verbunden", "@notConnected": {}, "notes": "Notizen", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "Kein Bild verfügbar", "@noImageAvailable": {}, + "noPricingAvailable": "Keine Preisinformation verfügbar", + "@noPricingAvailable": {}, + "noPricingDataFound": "Keine Preisdaten für diesen Teil gefunden", + "@noPricingDataFound": {}, "noSubcategories": "Keine Unter-Kategorien", "@noSubcategories": {}, "noSubcategoriesAvailable": "Keine Unter-Kategorien verfügbar", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "Passwort darf nicht leer sein", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "Das Konto hat die erforderlichen Berechtigungen zum Ausführen dieses Vorgangs nicht", "@permissionAccountDenied": {}, "permissionRequired": "Berechtigung erforderlich", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Server nicht ausgewählt", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Lieferungen", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Lieferung hinzufügen", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Versandt", "@shipped": {}, "sku": "Bestellnummer", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Gesamtbetrag", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Verschieben", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Website", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Preis", "@price": {}, "priceRange": "Preisspanne", @@ -1141,15 +1197,5 @@ "currency": "Währung", "@currency": {}, "priceBreaks": "Price Breaks", - "@priceBreaks": {}, - "noPricingAvailable": "Keine Preisinformation verfügbar", - "@noPricingAvailable": {}, - "noPricingDataFound": "Keine Preisdaten für diesen Teil gefunden", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Möchten Sie dieses Bild wirklich löschen?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Bild löschen", - "@deleteImageTooltip": {}, - "deleteImage": "Bild löschen", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/el_GR/app_el_GR.arb b/lib/l10n/el_GR/app_el_GR.arb index 7decd92e..a3a252b3 100644 --- a/lib/l10n/el_GR/app_el_GR.arb +++ b/lib/l10n/el_GR/app_el_GR.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Κατανομή Αποθέματος", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "Προβολή πληροφοριών έκδοσης εφαρμογής", "@appReleaseNotes": {}, "appSettings": "Ρυθμίσεις Εφαρμογής", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Delete operation failed", "@deleteFailed": {}, + "deleteImageConfirmation": "Are you sure you want to delete this image?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Delete Image", + "@deleteImageTooltip": {}, + "deleteImage": "Delete Image", + "@deleteImage": {}, "deletePart": "Delete Part", "@deletePart": {}, "deletePartDetail": "Remove this part from the database", "@deletePartDetail": {}, "deleteSuccess": "Delete operation successful", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Description", "@description": {}, "destination": "Destination", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Show purchase order button on home screen", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Show Sales Orders", "@homeShowSo": {}, "homeShowSoDescription": "Show sales order button on home screen", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Invalid username / password combination", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Issue", "@issue": {}, "issueDate": "Issue Date", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Name", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Not Connected", "@notConnected": {}, "notes": "Notes", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "No image available", "@noImageAvailable": {}, + "noPricingAvailable": "No pricing available", + "@noPricingAvailable": {}, + "noPricingDataFound": "No pricing data found for this part", + "@noPricingDataFound": {}, "noSubcategories": "No Subcategories", "@noSubcategories": {}, "noSubcategoriesAvailable": "No subcategories available", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "Password cannot be empty", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "Your account does not have the required permissions to perform this action", "@permissionAccountDenied": {}, "permissionRequired": "Permission Required", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Server not selected", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Shipments", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Add Shipment", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Shipped", "@shipped": {}, "sku": "SKU", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Total Price", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Transfer", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Website", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Price", "@price": {}, "priceRange": "Price Range", @@ -1141,15 +1197,5 @@ "currency": "Currency", "@currency": {}, "priceBreaks": "Price Breaks", - "@priceBreaks": {}, - "noPricingAvailable": "No pricing available", - "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", - "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/es_ES/app_es_ES.arb b/lib/l10n/es_ES/app_es_ES.arb index db35685e..28a808d9 100644 --- a/lib/l10n/es_ES/app_es_ES.arb +++ b/lib/l10n/es_ES/app_es_ES.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Asignar stock", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "Mostrar notas de versión de la aplicación", "@appReleaseNotes": {}, "appSettings": "Ajustes de aplicación", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Operación de borrado fallida", "@deleteFailed": {}, + "deleteImageConfirmation": "¿Estas seguro de eliminar esta imagen?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Eliminar imagen", + "@deleteImageTooltip": {}, + "deleteImage": "Eliminar imagen", + "@deleteImage": {}, "deletePart": "Eliminar pieza", "@deletePart": {}, "deletePartDetail": "Eliminar esta pieza de la base de datos", "@deletePartDetail": {}, "deleteSuccess": "Operación de borrado exitosa", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Descripción", "@description": {}, "destination": "Destinación", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Mostrar botón de orden de compra en la pantalla de inicio", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Mostrar Órdenes de Venta", "@homeShowSo": {}, "homeShowSoDescription": "Mostrar botón de órdenes de ventas en la pantalla de inicio", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Combinación de nombre de usuario / contraseña no válida", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "", "@issue": {}, "issueDate": "Fecha de problema", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Nombre", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "No conectado", "@notConnected": {}, "notes": "Notas", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "No hay imagen disponible", "@noImageAvailable": {}, + "noPricingAvailable": "No hay precios disponibles", + "@noPricingAvailable": {}, + "noPricingDataFound": "No se encontraron datos de precios para esta parte", + "@noPricingDataFound": {}, "noSubcategories": "No hay subcategorías", "@noSubcategories": {}, "noSubcategoriesAvailable": "No hay subcategorías disponibles", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "El campo de Contraseña no puede estar vacío", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "Tu usuario no cuenta con los permisos necesarios para realizar esta acción", "@permissionAccountDenied": {}, "permissionRequired": "Se requiere autorización", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Servidor no seleccionado", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Envíos", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Añadir envío", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Enviado", "@shipped": {}, "sku": "SKU", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Precio total", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Transferir", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Sitio Web", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Precio", "@price": {}, "priceRange": "Rango de precios", @@ -1141,15 +1197,5 @@ "currency": "Divisa", "@currency": {}, "priceBreaks": "Diferenciales de precios", - "@priceBreaks": {}, - "noPricingAvailable": "No hay precios disponibles", - "@noPricingAvailable": {}, - "noPricingDataFound": "No se encontraron datos de precios para esta parte", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "¿Estas seguro de eliminar esta imagen?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Eliminar imagen", - "@deleteImageTooltip": {}, - "deleteImage": "Eliminar imagen", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/es_MX/app_es_MX.arb b/lib/l10n/es_MX/app_es_MX.arb index 0b06fc28..f70e9d05 100644 --- a/lib/l10n/es_MX/app_es_MX.arb +++ b/lib/l10n/es_MX/app_es_MX.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Asignar existencias", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "Mostrar notas de versión de la aplicación", "@appReleaseNotes": {}, "appSettings": "Ajustes de aplicación", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Operación de eliminación fallida", "@deleteFailed": {}, + "deleteImageConfirmation": "Are you sure you want to delete this image?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Delete Image", + "@deleteImageTooltip": {}, + "deleteImage": "Delete Image", + "@deleteImage": {}, "deletePart": "Eliminar parte", "@deletePart": {}, "deletePartDetail": "Eliminar esta parte de la base de datos", "@deletePartDetail": {}, "deleteSuccess": "Operación de eliminación exitosa", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Descripción", "@description": {}, "destination": "Destino", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Mostrar botón de orden de compra en la pantalla de inicio", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Mostrar Órdenes de Venta", "@homeShowSo": {}, "homeShowSoDescription": "Mostrar botón de órdenes de ventas en la pantalla de inicio", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Combinación inválida de usuario/contraseña", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Emitir", "@issue": {}, "issueDate": "Fecha de emisión", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Nombre", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "No conectado", "@notConnected": {}, "notes": "Notas", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "No image available", "@noImageAvailable": {}, + "noPricingAvailable": "No pricing available", + "@noPricingAvailable": {}, + "noPricingDataFound": "No pricing data found for this part", + "@noPricingDataFound": {}, "noSubcategories": "No hay subcategorías", "@noSubcategories": {}, "noSubcategoriesAvailable": "No hay subcategorías disponibles", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "La contraseña no puede estar vacía", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "Tu cuenta no cuenta con los permisos necesarios para realizar esta acción", "@permissionAccountDenied": {}, "permissionRequired": "Se requiere autorización", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Servidor no seleccionado", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Envíos", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Añadir Envío", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Enviado", "@shipped": {}, "sku": "SKU", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Precio total", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Transferir", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Sitio web", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Price", "@price": {}, "priceRange": "Price Range", @@ -1141,15 +1197,5 @@ "currency": "Currency", "@currency": {}, "priceBreaks": "Price Breaks", - "@priceBreaks": {}, - "noPricingAvailable": "No pricing available", - "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", - "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/et_EE/app_et_EE.arb b/lib/l10n/et_EE/app_et_EE.arb index 83ed8750..2bd5e323 100644 --- a/lib/l10n/et_EE/app_et_EE.arb +++ b/lib/l10n/et_EE/app_et_EE.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Jaota laoseis", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "Display app release notes", "@appReleaseNotes": {}, "appSettings": "Rakenduse sätted", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Delete operation failed", "@deleteFailed": {}, + "deleteImageConfirmation": "Are you sure you want to delete this image?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Delete Image", + "@deleteImageTooltip": {}, + "deleteImage": "Delete Image", + "@deleteImage": {}, "deletePart": "Kustuta osa", "@deletePart": {}, "deletePartDetail": "Remove this part from the database", "@deletePartDetail": {}, "deleteSuccess": "Delete operation successful", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Kirjeldus", "@description": {}, "destination": "Sihtkoht", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Show purchase order button on home screen", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Show Sales Orders", "@homeShowSo": {}, "homeShowSoDescription": "Show sales order button on home screen", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Invalid username / password combination", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Issue", "@issue": {}, "issueDate": "Issue Date", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Nimi", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Pole ühendatud", "@notConnected": {}, "notes": "Märkmed", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "No image available", "@noImageAvailable": {}, + "noPricingAvailable": "No pricing available", + "@noPricingAvailable": {}, + "noPricingDataFound": "No pricing data found for this part", + "@noPricingDataFound": {}, "noSubcategories": "Alamkategooriaid pole", "@noSubcategories": {}, "noSubcategoriesAvailable": "Ühtegi alamkategooriat pole saadaval", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "Password cannot be empty", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "Teie kontol ei ole vajalikke õigusi selle toimingu sooritamiseks", "@permissionAccountDenied": {}, "permissionRequired": "Permission Required", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Serverite pole valitud", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Saadetised", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Lisa saadetis", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Saadetud", "@shipped": {}, "sku": "Tootekood", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Hind kokku", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Ülekanne", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Koduleht", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Price", "@price": {}, "priceRange": "Price Range", @@ -1141,15 +1197,5 @@ "currency": "Currency", "@currency": {}, "priceBreaks": "Price Breaks", - "@priceBreaks": {}, - "noPricingAvailable": "No pricing available", - "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", - "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/fa_IR/app_fa_IR.arb b/lib/l10n/fa_IR/app_fa_IR.arb index c0ac3e46..131d5519 100644 --- a/lib/l10n/fa_IR/app_fa_IR.arb +++ b/lib/l10n/fa_IR/app_fa_IR.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "موجودی اختصاص داده شده", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "نمایش یادداشت های انتشار برنامه", "@appReleaseNotes": {}, "appSettings": "تنظیمات برنامه", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "عملیات حذف ناموفق بوده است", "@deleteFailed": {}, + "deleteImageConfirmation": "Are you sure you want to delete this image?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Delete Image", + "@deleteImageTooltip": {}, + "deleteImage": "Delete Image", + "@deleteImage": {}, "deletePart": "حذف قسمت", "@deletePart": {}, "deletePartDetail": "این قطعه را از پایگاه داده حذف کنید", "@deletePartDetail": {}, "deleteSuccess": "عملیات حذف با موفقیت انجام شد", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "توضیحات", "@description": {}, "destination": "مقصد", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "نمایش دکمه سفارش خرید در صفحه خانه", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "نمایش سفارش های فروش", "@homeShowSo": {}, "homeShowSoDescription": "نمایش دکمه سفارش فروش در صفحه خانه", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "ترکیب نام کاربری / رمز عبور نامعتبر", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "موضوع", "@issue": {}, "issueDate": "تاریخ صدور", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "نام", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "متصل نیست", "@notConnected": {}, "notes": "یادداشت ها", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "No image available", "@noImageAvailable": {}, + "noPricingAvailable": "No pricing available", + "@noPricingAvailable": {}, + "noPricingDataFound": "No pricing data found for this part", + "@noPricingDataFound": {}, "noSubcategories": "بدون زیر دسته بندی", "@noSubcategories": {}, "noSubcategoriesAvailable": "هیچ زیر دسته بندی ای در دسترس نیست", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "رمز عبور نمی تواند خالی باشد", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "حساب شما مجوزهای لازم برای انجام این عمل را ندارد", "@permissionAccountDenied": {}, "permissionRequired": "نیازمند مجوز", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "سرور انتخاب نشده است", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "محموله ها", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "افزودن محموله", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "ارسال شده", "@shipped": {}, "sku": "واحد نگهداری موجودی", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "قیمت کل", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "انتقال", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "وب سایت", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Price", "@price": {}, "priceRange": "Price Range", @@ -1141,15 +1197,5 @@ "currency": "Currency", "@currency": {}, "priceBreaks": "Price Breaks", - "@priceBreaks": {}, - "noPricingAvailable": "No pricing available", - "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", - "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/fi_FI/app_fi_FI.arb b/lib/l10n/fi_FI/app_fi_FI.arb index cc6cf50f..3126d75f 100644 --- a/lib/l10n/fi_FI/app_fi_FI.arb +++ b/lib/l10n/fi_FI/app_fi_FI.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Allocate Stock", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "Näytä sovelluksen julkaisutiedot", "@appReleaseNotes": {}, "appSettings": "Sovelluksen asetukset", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Poisto epäonnistui", "@deleteFailed": {}, + "deleteImageConfirmation": "Are you sure you want to delete this image?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Delete Image", + "@deleteImageTooltip": {}, + "deleteImage": "Delete Image", + "@deleteImage": {}, "deletePart": "Poista osa", "@deletePart": {}, "deletePartDetail": "Poista tämä osa tietokannasta", "@deletePartDetail": {}, "deleteSuccess": "Poistaminen onnistui", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Kuvaus", "@description": {}, "destination": "Destination", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Show purchase order button on home screen", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Show Sales Orders", "@homeShowSo": {}, "homeShowSoDescription": "Show sales order button on home screen", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Virheellinen käyttäjätunnuksen / salasanan yhdistelmä", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Issue", "@issue": {}, "issueDate": "Issue Date", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Nimi", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Not Connected", "@notConnected": {}, "notes": "Merkinnät", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "No image available", "@noImageAvailable": {}, + "noPricingAvailable": "No pricing available", + "@noPricingAvailable": {}, + "noPricingDataFound": "No pricing data found for this part", + "@noPricingDataFound": {}, "noSubcategories": "No Subcategories", "@noSubcategories": {}, "noSubcategoriesAvailable": "No subcategories available", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "Salasana ei voi olla tyhjä", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "Tililläsi ei ole tarvittavia oikeuksia tämän toiminnon suorittamiseen", "@permissionAccountDenied": {}, "permissionRequired": "Käyttöoikeus vaaditaan", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Palvelinta ei ole valittu", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Shipments", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Add Shipment", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Shipped", "@shipped": {}, "sku": "SKU", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Total Price", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Siirrä", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Sivusto", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Price", "@price": {}, "priceRange": "Price Range", @@ -1141,15 +1197,5 @@ "currency": "Currency", "@currency": {}, "priceBreaks": "Price Breaks", - "@priceBreaks": {}, - "noPricingAvailable": "No pricing available", - "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", - "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/fr_FR/app_fr_FR.arb b/lib/l10n/fr_FR/app_fr_FR.arb index 1c71f6e0..f5f55ac6 100644 --- a/lib/l10n/fr_FR/app_fr_FR.arb +++ b/lib/l10n/fr_FR/app_fr_FR.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Allouer un stock", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "Afficher les notes de version de l'application", "@appReleaseNotes": {}, "appSettings": "Réglages de l'application", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "L'opération de suppression a échoué", "@deleteFailed": {}, + "deleteImageConfirmation": "Êtes-vous sûr de vouloir supprimer cette image ?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Supprimer l'image", + "@deleteImageTooltip": {}, + "deleteImage": "Supprimer l'image", + "@deleteImage": {}, "deletePart": "Supprimer la pièce", "@deletePart": {}, "deletePartDetail": "Supprimer cette pièce de la base de données", "@deletePartDetail": {}, "deleteSuccess": "Opération de suppression réussie", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Description", "@description": {}, "destination": "Destination", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Afficher le bouton de l'ordre d'achat sur l'écran d'accueil", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Afficher les commandes de vente", "@homeShowSo": {}, "homeShowSoDescription": "Afficher le bouton des commandes sur l'écran d'accueil", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Nom d'utilisateur/mot de passe invalide", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Problème", "@issue": {}, "issueDate": "Date d'émission", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Nom", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Non connecté", "@notConnected": {}, "notes": "Notes", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "Pas d'image disponible", "@noImageAvailable": {}, + "noPricingAvailable": "Aucune tarification disponible", + "@noPricingAvailable": {}, + "noPricingDataFound": "Aucune donnée de tarification disponible pour cette pièce", + "@noPricingDataFound": {}, "noSubcategories": "Pas de sous-catégorie", "@noSubcategories": {}, "noSubcategoriesAvailable": "Aucune sous-catégorie disponible", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "Le mot de passe peut pas être vide", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "Vous n'avez pas les autorisations requises pour exécuter cette action", "@permissionAccountDenied": {}, "permissionRequired": "Autorisation requise", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Serveur non sélectionné", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Modes de livraison", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Ajouter un mode de livraison", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Expédié", "@shipped": {}, "sku": "UGS", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Prix Total", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Transfert", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Site web", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Prix", "@price": {}, "priceRange": "Fourchette de prix", @@ -1141,15 +1197,5 @@ "currency": "Devise", "@currency": {}, "priceBreaks": "Ruptures de prix", - "@priceBreaks": {}, - "noPricingAvailable": "Aucune tarification disponible", - "@noPricingAvailable": {}, - "noPricingDataFound": "Aucune donnée de tarification disponible pour cette pièce", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Êtes-vous sûr de vouloir supprimer cette image ?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Supprimer l'image", - "@deleteImageTooltip": {}, - "deleteImage": "Supprimer l'image", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/he_IL/app_he_IL.arb b/lib/l10n/he_IL/app_he_IL.arb index b7ca5b3e..20994060 100644 --- a/lib/l10n/he_IL/app_he_IL.arb +++ b/lib/l10n/he_IL/app_he_IL.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "הקצאת מלאי", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": " הצג הערות פרסום של האפליקציה", "@appReleaseNotes": {}, "appSettings": "הגדרות אפליקציה", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "פעולת המחיקה נכשלה", "@deleteFailed": {}, + "deleteImageConfirmation": "Are you sure you want to delete this image?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Delete Image", + "@deleteImageTooltip": {}, + "deleteImage": "Delete Image", + "@deleteImage": {}, "deletePart": "מחק פריט", "@deletePart": {}, "deletePartDetail": "הסר פריט זה ממסד הנתונים", "@deletePartDetail": {}, "deleteSuccess": "פעולת המחיקה הצליחה", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "תיאור", "@description": {}, "destination": "Destination", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "הצג את לחצן הזמנת רכש במסך הבית", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "הצג הזמנות מכירה", "@homeShowSo": {}, "homeShowSoDescription": "הצג את לחצן הזמנות מכירה במסך הבית", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "שילוב שם משתמש/סיסמה לא תקין", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "להנפיק", "@issue": {}, "issueDate": "תאריך הנפקה", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "שם", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "לא מחובר", "@notConnected": {}, "notes": "הערות", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "No image available", "@noImageAvailable": {}, + "noPricingAvailable": "No pricing available", + "@noPricingAvailable": {}, + "noPricingDataFound": "No pricing data found for this part", + "@noPricingDataFound": {}, "noSubcategories": "אין קטגורית משנה", "@noSubcategories": {}, "noSubcategoriesAvailable": "אין קטכוריות משנה זמינות", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "הסיסמה לא יכולה להיות ריקה", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "לחשבון זה אין את ההרשאות לבצע פעולה זו", "@permissionAccountDenied": {}, "permissionRequired": "נדרשת הרשאה", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "השרת לא נבחר", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "משלוחים", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Add Shipment", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Shipped", "@shipped": {}, "sku": "מק\"ט [מספר קטלוגי] ", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "מחיר כולל", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "העבר", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "אתר", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Price", "@price": {}, "priceRange": "Price Range", @@ -1141,15 +1197,5 @@ "currency": "Currency", "@currency": {}, "priceBreaks": "Price Breaks", - "@priceBreaks": {}, - "noPricingAvailable": "No pricing available", - "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", - "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/hi_IN/app_hi_IN.arb b/lib/l10n/hi_IN/app_hi_IN.arb index 859bb73a..1bf6e29a 100644 --- a/lib/l10n/hi_IN/app_hi_IN.arb +++ b/lib/l10n/hi_IN/app_hi_IN.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Allocate Stock", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "Display app release notes", "@appReleaseNotes": {}, "appSettings": "App Settings", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Delete operation failed", "@deleteFailed": {}, + "deleteImageConfirmation": "Are you sure you want to delete this image?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Delete Image", + "@deleteImageTooltip": {}, + "deleteImage": "Delete Image", + "@deleteImage": {}, "deletePart": "Delete Part", "@deletePart": {}, "deletePartDetail": "Remove this part from the database", "@deletePartDetail": {}, "deleteSuccess": "Delete operation successful", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Description", "@description": {}, "destination": "Destination", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Show purchase order button on home screen", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Show Sales Orders", "@homeShowSo": {}, "homeShowSoDescription": "Show sales order button on home screen", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Invalid username / password combination", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Issue", "@issue": {}, "issueDate": "Issue Date", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Name", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Not Connected", "@notConnected": {}, "notes": "Notes", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "No image available", "@noImageAvailable": {}, + "noPricingAvailable": "No pricing available", + "@noPricingAvailable": {}, + "noPricingDataFound": "No pricing data found for this part", + "@noPricingDataFound": {}, "noSubcategories": "No Subcategories", "@noSubcategories": {}, "noSubcategoriesAvailable": "No subcategories available", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "Password cannot be empty", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "Your account does not have the required permissions to perform this action", "@permissionAccountDenied": {}, "permissionRequired": "Permission Required", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Server not selected", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Shipments", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Add Shipment", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Shipped", "@shipped": {}, "sku": "SKU", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Total Price", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Transfer", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Website", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Price", "@price": {}, "priceRange": "Price Range", @@ -1141,15 +1197,5 @@ "currency": "Currency", "@currency": {}, "priceBreaks": "Price Breaks", - "@priceBreaks": {}, - "noPricingAvailable": "No pricing available", - "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", - "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/hu_HU/app_hu_HU.arb b/lib/l10n/hu_HU/app_hu_HU.arb index 31121be2..b3ba87d5 100644 --- a/lib/l10n/hu_HU/app_hu_HU.arb +++ b/lib/l10n/hu_HU/app_hu_HU.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Készlet foglalása", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "Kiadási közlemények", "@appReleaseNotes": {}, "appSettings": "Alkalmazásbeállítások", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Törlés sikertelen", "@deleteFailed": {}, + "deleteImageConfirmation": "Biztosan törli a képet?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Kép törlése", + "@deleteImageTooltip": {}, + "deleteImage": "Kép törlése", + "@deleteImage": {}, "deletePart": "Alkatrész törlése", "@deletePart": {}, "deletePartDetail": "Alkatrész eltávolítása az adatbázisból", "@deletePartDetail": {}, "deleteSuccess": "Törlés sikeres", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Leírás", "@description": {}, "destination": "Cél", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Beszerzési rendelések gomb megjelenítése a főoldalon", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Vevői rendelések megmutatása", "@homeShowSo": {}, "homeShowSoDescription": "Értékesítési rendelések gomb megjelenítése a főoldalon", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Érvénytelen felhasználónév/jelszó kombináció", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Kiküldés", "@issue": {}, "issueDate": "Kiállítás dátuma", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Név", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Nincs kapcsolódva", "@notConnected": {}, "notes": "Megjegyzések", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "Nincs elérhető kép", "@noImageAvailable": {}, + "noPricingAvailable": "Árazás nem elérhető", + "@noPricingAvailable": {}, + "noPricingDataFound": "Nincs árazási információ ehhez az alkatrészhez", + "@noPricingDataFound": {}, "noSubcategories": "Nincsenek alkategóriák", "@noSubcategories": {}, "noSubcategoriesAvailable": "Nincsenek alkategóriák", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "Jelszó nem lehet üres", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "Nincs meg a szükséges jogosultságod, hogy végrehajtsd ezt a műveletet", "@permissionAccountDenied": {}, "permissionRequired": "Engedély szükséges", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Nincs kiszolgáló választva", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Szállítmányok", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Szállítmány hozzáadása", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Kiszállítva", "@shipped": {}, "sku": "SKU", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Teljes ár", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Áthelyezés", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Weboldal", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Ár", "@price": {}, "priceRange": "Ártartomány", @@ -1141,15 +1197,5 @@ "currency": "Pénznem", "@currency": {}, "priceBreaks": "Ársávok", - "@priceBreaks": {}, - "noPricingAvailable": "Árazás nem elérhető", - "@noPricingAvailable": {}, - "noPricingDataFound": "Nincs árazási információ ehhez az alkatrészhez", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Biztosan törli a képet?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Kép törlése", - "@deleteImageTooltip": {}, - "deleteImage": "Kép törlése", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/id_ID/app_id_ID.arb b/lib/l10n/id_ID/app_id_ID.arb index f89f8bf2..9d2ae4b2 100644 --- a/lib/l10n/id_ID/app_id_ID.arb +++ b/lib/l10n/id_ID/app_id_ID.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Alokasikan Stok", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "Tampilkan catatan rilis aplikasi", "@appReleaseNotes": {}, "appSettings": "Pengaturan Aplikasi", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Operasi penghapusan gagal", "@deleteFailed": {}, + "deleteImageConfirmation": "Are you sure you want to delete this image?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Delete Image", + "@deleteImageTooltip": {}, + "deleteImage": "Delete Image", + "@deleteImage": {}, "deletePart": "Hapus Part", "@deletePart": {}, "deletePartDetail": "Hapus Part ini dari database", "@deletePartDetail": {}, "deleteSuccess": "Operasi penghapusan berhasil", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Deskripsi", "@description": {}, "destination": "Destination", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Tampilkan tombol pesanan pembelian di layar beranda", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Tampilkan Pesanan Penjualan", "@homeShowSo": {}, "homeShowSoDescription": "Tampilkan tombol pesanan penjualan di layar beranda", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Invalid username / password combination", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Issue", "@issue": {}, "issueDate": "Issue Date", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Nama", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Tidak Tersambung", "@notConnected": {}, "notes": "Catatan", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "No image available", "@noImageAvailable": {}, + "noPricingAvailable": "No pricing available", + "@noPricingAvailable": {}, + "noPricingDataFound": "No pricing data found for this part", + "@noPricingDataFound": {}, "noSubcategories": "Tidak ada subkategori", "@noSubcategories": {}, "noSubcategoriesAvailable": "Tidak ada subkategori tersedia", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "Kata sandi tidak boleh kosong", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "Akun Anda tidak memiliki izin yang diperlukan untuk melakukan tindakan ini", "@permissionAccountDenied": {}, "permissionRequired": "Izin Diperlukan", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Server tidak dipilih", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Pengiriman", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Tambahkan Pengiriman", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Terkirim", "@shipped": {}, "sku": "SKU", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Total Harga", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Transfer", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Situs", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Price", "@price": {}, "priceRange": "Price Range", @@ -1141,15 +1197,5 @@ "currency": "Currency", "@currency": {}, "priceBreaks": "Price Breaks", - "@priceBreaks": {}, - "noPricingAvailable": "No pricing available", - "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", - "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/it_IT/app_it_IT.arb b/lib/l10n/it_IT/app_it_IT.arb index b26869e7..af8f2257 100644 --- a/lib/l10n/it_IT/app_it_IT.arb +++ b/lib/l10n/it_IT/app_it_IT.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Alloca stock", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "Mostra le note di rilascio dell'app", "@appReleaseNotes": {}, "appSettings": "Impostazioni App", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Operazione di eliminazione fallita", "@deleteFailed": {}, + "deleteImageConfirmation": "Sei sicuro di voler eliminare questa immagine?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Elimina immagine", + "@deleteImageTooltip": {}, + "deleteImage": "Elimina immagine", + "@deleteImage": {}, "deletePart": "Elimina Articolo", "@deletePart": {}, "deletePartDetail": "Rimuovi quest'articolo dal database", "@deletePartDetail": {}, "deleteSuccess": "Operazione di eliminazione riuscita", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Descrizione", "@description": {}, "destination": "Destinazione", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Mostra il pulsante ordine d'acquisto nella schermata home", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Mostra ordini di vendita", "@homeShowSo": {}, "homeShowSoDescription": "Mostra bottone ordine di vendita sulla schermata principale", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Combinazione nome utente e password non valida", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Problema", "@issue": {}, "issueDate": "Data di emissione", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Nome", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Non connesso", "@notConnected": {}, "notes": "Note", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "Nessuna immagine disponibile", "@noImageAvailable": {}, + "noPricingAvailable": "Nessun prezzo disponibile", + "@noPricingAvailable": {}, + "noPricingDataFound": "Nessun dato trovato per questo articolo", + "@noPricingDataFound": {}, "noSubcategories": "Nessuna sotto categoria", "@noSubcategories": {}, "noSubcategoriesAvailable": "Nessuna sottocategoria disponibile", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "La password non può essere vuota", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "Non disponi dei permessi per eseguire l'azione", "@permissionAccountDenied": {}, "permissionRequired": "Autorizzazione necessaria", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Server non selezionato", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Spedizioni", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Aggiungi Spedizione", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Spedito", "@shipped": {}, "sku": "Codice articolo", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Prezzo Totale", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Trasferisci", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Sito Web", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Prezzo", "@price": {}, "priceRange": "Fascia di Prezzo", @@ -1141,15 +1197,5 @@ "currency": "Valuta", "@currency": {}, "priceBreaks": "Divergenze di prezzo", - "@priceBreaks": {}, - "noPricingAvailable": "Nessun prezzo disponibile", - "@noPricingAvailable": {}, - "noPricingDataFound": "Nessun dato trovato per questo articolo", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Sei sicuro di voler eliminare questa immagine?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Elimina immagine", - "@deleteImageTooltip": {}, - "deleteImage": "Elimina immagine", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/ja_JP/app_ja_JP.arb b/lib/l10n/ja_JP/app_ja_JP.arb index 73b17325..170c5128 100644 --- a/lib/l10n/ja_JP/app_ja_JP.arb +++ b/lib/l10n/ja_JP/app_ja_JP.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "在庫の割り当て", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "アプリのリリースノートを表示", "@appReleaseNotes": {}, "appSettings": "アプリ設定", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "削除操作に失敗しました", "@deleteFailed": {}, + "deleteImageConfirmation": "Are you sure you want to delete this image?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Delete Image", + "@deleteImageTooltip": {}, + "deleteImage": "Delete Image", + "@deleteImage": {}, "deletePart": "部品を削除", "@deletePart": {}, "deletePartDetail": "データベースからこの部品を削除します", "@deletePartDetail": {}, "deleteSuccess": "操作の削除に成功しました", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "説明", "@description": {}, "destination": "保存先", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "注文ボタンをホーム画面に表示", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "注文を表示", "@homeShowSo": {}, "homeShowSoDescription": "ホーム画面に注文ボタンを表示", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "無効なユーザー名/パスワードの組み合わせです。", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "問題", "@issue": {}, "issueDate": "発行日", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "名前", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "接続されていません", "@notConnected": {}, "notes": "メモ", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "No image available", "@noImageAvailable": {}, + "noPricingAvailable": "No pricing available", + "@noPricingAvailable": {}, + "noPricingDataFound": "No pricing data found for this part", + "@noPricingDataFound": {}, "noSubcategories": "サブカテゴリはありません", "@noSubcategories": {}, "noSubcategoriesAvailable": "利用可能なサブ在庫場所がありません", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "パスワードは空欄にできません。", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "操作を行う権限がありません", "@permissionAccountDenied": {}, "permissionRequired": "権限が必要です", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "サーバーが選択されていません", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "発送品", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "出荷を追加", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "出荷済み", "@shipped": {}, "sku": "SKU", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "合計金額", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "転送", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Webサイト", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Price", "@price": {}, "priceRange": "Price Range", @@ -1141,15 +1197,5 @@ "currency": "Currency", "@currency": {}, "priceBreaks": "Price Breaks", - "@priceBreaks": {}, - "noPricingAvailable": "No pricing available", - "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", - "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/ko_KR/app_ko_KR.arb b/lib/l10n/ko_KR/app_ko_KR.arb index 0b93e85e..6241ddb1 100644 --- a/lib/l10n/ko_KR/app_ko_KR.arb +++ b/lib/l10n/ko_KR/app_ko_KR.arb @@ -4,25 +4,25 @@ "@appTitle": { "description": "InvenTree application title string" }, - "ok": "OK", + "ok": "확인", "@ok": { "description": "OK" }, - "about": "About", + "about": "정보", "@about": {}, - "accountDetails": "Account Details", + "accountDetails": "계정 정보", "@accountDetails": {}, - "actions": "Actions", + "actions": "작업", "@actions": { "description": "" }, - "actionsNone": "No actions available", + "actionsNone": "실행 가능한 작업 없음", "@actionsNone": {}, "add": "추가", "@add": { "description": "add" }, - "addStock": "Add Stock", + "addStock": "재고 추가", "@addStock": { "description": "add stock" }, @@ -42,59 +42,61 @@ "@aspectRatio3x2": {}, "aspectRatio4x3": "4:3", "@aspectRatio4x3": {}, - "aspectRatioSquare": "Square (1:1)", + "aspectRatioSquare": "정사각형 (1:1)", "@aspectRatioSquare": {}, "allocateStock": "Allocate Stock", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "앱 릴리즈 노트 표시", "@appReleaseNotes": {}, "appSettings": "앱 설정", "@appSettings": {}, "appSettingsDetails": "Configure InvenTree app settings", "@appSettingsDetails": {}, - "assignedToMe": "Assigned to Me", + "assignedToMe": "나에게 할당됨", "@assignedToMe": {}, "assignedToMeDetail": "Show orders which are assigned to me", "@assignedToMeDetail": {}, - "attachments": "Attachments", + "attachments": "첨부", "@attachments": {}, - "attachImage": "Attach Image", + "attachImage": "사진 첨부", "@attachImage": { "description": "Attach an image" }, - "attachmentNone": "No attachments found", + "attachmentNone": "첨부 파일이 없음", "@attachmentNone": {}, - "attachmentNoneDetail": "No attachments found", + "attachmentNoneDetail": "첨부 파일이 없음", "@attachmentNoneDetail": {}, - "attachmentSelect": "Select attachment", + "attachmentSelect": "첨부파일 선택", "@attachmentSelect": {}, "attention": "Attention", "@attention": {}, - "available": "Available", + "available": "사용가능", "@available": {}, "availableStock": "Available Stock", "@availableStock": {}, - "barcodes": "Barcodes", + "barcodes": "바코드", "@barcodes": {}, - "barcodeSettings": "Barcode Settings", + "barcodeSettings": "바코드 설정", "@barcodeSettings": {}, - "barcodeAssign": "Assign Barcode", + "barcodeAssign": "바코드 할당", "@barcodeAssign": {}, - "barcodeAssignDetail": "Scan custom barcode to assign", + "barcodeAssignDetail": "커스텀 바코드 할당", "@barcodeAssignDetail": {}, - "barcodeAssigned": "Barcode assigned", + "barcodeAssigned": "바코드 할당됨", "@barcodeAssigned": {}, - "barcodeError": "Barcode scan error", + "barcodeError": "바코드 스캔 오류", "@barcodeError": {}, - "barcodeInUse": "Barcode already assigned", + "barcodeInUse": "이미 바코드가 할당됨", "@barcodeInUse": {}, - "barcodeMissingHash": "Barcode hash data missing from response", + "barcodeMissingHash": "바코드 해시 데이터 응답 없음", "@barcodeMissingHash": {}, - "barcodeNoMatch": "No match for barcode", + "barcodeNoMatch": "바코드가 일치하지 않음", "@barcodeNoMatch": {}, - "barcodeNotAssigned": "Barcode not assigned", + "barcodeNotAssigned": "바코드가 할당되지 않음", "@barcodeNotAssigned": {}, - "barcodeScanPart": "Scan part barcode", + "barcodeScanPart": "스캔 파트 바코드", "@barcodeScanPart": {}, "barcodeReceivePart": "Scan barcode to receive part", "@barcodeReceivePart": {}, @@ -192,7 +194,7 @@ "@confirmScanDetail": {}, "connectionRefused": "Connection Refused", "@connectionRefused": {}, - "count": "Count", + "count": "수량", "@count": { "description": "Count" }, @@ -202,13 +204,13 @@ }, "credits": "Credits", "@credits": {}, - "crop": "Crop", + "crop": "자르기", "@crop": {}, - "cropImage": "Crop Image", + "cropImage": "이미지 자르기", "@cropImage": {}, - "customer": "Customer", + "customer": "고객", "@customer": {}, - "customers": "Customers", + "customers": "고객", "@customers": {}, "customerReference": "Customer Reference", "@customerReference": {}, @@ -218,27 +220,35 @@ "@colorScheme": {}, "colorSchemeDetail": "Select color scheme", "@colorSchemeDetail": {}, - "darkMode": "Dark Mode", + "darkMode": "다크 모드", "@darkMode": {}, - "darkModeEnable": "Enable dark mode", + "darkModeEnable": "다크 모드 활성화", "@darkModeEnable": {}, - "delete": "Delete", + "delete": "삭제", "@delete": {}, "deleteFailed": "Delete operation failed", "@deleteFailed": {}, + "deleteImageConfirmation": "Are you sure you want to delete this image?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Delete Image", + "@deleteImageTooltip": {}, + "deleteImage": "Delete Image", + "@deleteImage": {}, "deletePart": "Delete Part", "@deletePart": {}, "deletePartDetail": "Remove this part from the database", "@deletePartDetail": {}, "deleteSuccess": "Delete operation successful", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Description", "@description": {}, "destination": "Destination", "@destination": {}, "destroyed": "Destroyed", "@destroyed": {}, - "details": "Details", + "details": "상세내용", "@details": { "description": "details" }, @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Show purchase order button on home screen", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Show Sales Orders", "@homeShowSo": {}, "homeShowSoDescription": "Show sales order button on home screen", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Invalid username / password combination", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Issue", "@issue": {}, "issueDate": "Issue Date", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Name", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Not Connected", "@notConnected": {}, "notes": "Notes", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "No image available", "@noImageAvailable": {}, + "noPricingAvailable": "No pricing available", + "@noPricingAvailable": {}, + "noPricingDataFound": "No pricing data found for this part", + "@noPricingDataFound": {}, "noSubcategories": "No Subcategories", "@noSubcategories": {}, "noSubcategoriesAvailable": "No subcategories available", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "비밀번호는 비워둘 수 없습니다", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "귀하의 계정은 이 작업에 필요한 권한이 없습니다", "@permissionAccountDenied": {}, "permissionRequired": "Permission Required", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Server not selected", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Shipments", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Add Shipment", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Shipped", "@shipped": {}, "sku": "SKU", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Total Price", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Transfer", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "웹사이트", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Price", "@price": {}, "priceRange": "Price Range", @@ -1141,15 +1197,5 @@ "currency": "Currency", "@currency": {}, "priceBreaks": "Price Breaks", - "@priceBreaks": {}, - "noPricingAvailable": "No pricing available", - "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", - "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/lt_LT/app_lt_LT.arb b/lib/l10n/lt_LT/app_lt_LT.arb index 202a20eb..6e5ff34c 100644 --- a/lib/l10n/lt_LT/app_lt_LT.arb +++ b/lib/l10n/lt_LT/app_lt_LT.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Allocate Stock", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "Display app release notes", "@appReleaseNotes": {}, "appSettings": "App Settings", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Delete operation failed", "@deleteFailed": {}, + "deleteImageConfirmation": "Are you sure you want to delete this image?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Delete Image", + "@deleteImageTooltip": {}, + "deleteImage": "Delete Image", + "@deleteImage": {}, "deletePart": "Delete Part", "@deletePart": {}, "deletePartDetail": "Remove this part from the database", "@deletePartDetail": {}, "deleteSuccess": "Delete operation successful", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Description", "@description": {}, "destination": "Destination", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Show purchase order button on home screen", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Show Sales Orders", "@homeShowSo": {}, "homeShowSoDescription": "Show sales order button on home screen", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Invalid username / password combination", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Issue", "@issue": {}, "issueDate": "Issue Date", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Name", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Not Connected", "@notConnected": {}, "notes": "Notes", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "No image available", "@noImageAvailable": {}, + "noPricingAvailable": "No pricing available", + "@noPricingAvailable": {}, + "noPricingDataFound": "No pricing data found for this part", + "@noPricingDataFound": {}, "noSubcategories": "No Subcategories", "@noSubcategories": {}, "noSubcategoriesAvailable": "No subcategories available", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "Password cannot be empty", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "Your account does not have the required permissions to perform this action", "@permissionAccountDenied": {}, "permissionRequired": "Permission Required", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Server not selected", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Shipments", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Add Shipment", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Shipped", "@shipped": {}, "sku": "SKU", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Total Price", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Transfer", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Website", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Price", "@price": {}, "priceRange": "Price Range", @@ -1141,15 +1197,5 @@ "currency": "Currency", "@currency": {}, "priceBreaks": "Price Breaks", - "@priceBreaks": {}, - "noPricingAvailable": "No pricing available", - "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", - "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/lv_LV/app_lv_LV.arb b/lib/l10n/lv_LV/app_lv_LV.arb index c65369a4..7dbe58f5 100644 --- a/lib/l10n/lv_LV/app_lv_LV.arb +++ b/lib/l10n/lv_LV/app_lv_LV.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Allocate Stock", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "Display app release notes", "@appReleaseNotes": {}, "appSettings": "Lietotnes iestatījumi", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Delete operation failed", "@deleteFailed": {}, + "deleteImageConfirmation": "Are you sure you want to delete this image?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Delete Image", + "@deleteImageTooltip": {}, + "deleteImage": "Delete Image", + "@deleteImage": {}, "deletePart": "Delete Part", "@deletePart": {}, "deletePartDetail": "Remove this part from the database", "@deletePartDetail": {}, "deleteSuccess": "Delete operation successful", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Apraksts", "@description": {}, "destination": "Mērķis", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Show purchase order button on home screen", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Show Sales Orders", "@homeShowSo": {}, "homeShowSoDescription": "Show sales order button on home screen", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Invalid username / password combination", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Issue", "@issue": {}, "issueDate": "Issue Date", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Name", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Not Connected", "@notConnected": {}, "notes": "Notes", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "No image available", "@noImageAvailable": {}, + "noPricingAvailable": "No pricing available", + "@noPricingAvailable": {}, + "noPricingDataFound": "No pricing data found for this part", + "@noPricingDataFound": {}, "noSubcategories": "No Subcategories", "@noSubcategories": {}, "noSubcategoriesAvailable": "No subcategories available", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "Password cannot be empty", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "Your account does not have the required permissions to perform this action", "@permissionAccountDenied": {}, "permissionRequired": "Permission Required", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Server not selected", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Shipments", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Add Shipment", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Shipped", "@shipped": {}, "sku": "SKU", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Total Price", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Transfer", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Website", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Price", "@price": {}, "priceRange": "Price Range", @@ -1141,15 +1197,5 @@ "currency": "Currency", "@currency": {}, "priceBreaks": "Price Breaks", - "@priceBreaks": {}, - "noPricingAvailable": "No pricing available", - "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", - "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/nl_NL/app_nl_NL.arb b/lib/l10n/nl_NL/app_nl_NL.arb index b039e034..4e574ec0 100644 --- a/lib/l10n/nl_NL/app_nl_NL.arb +++ b/lib/l10n/nl_NL/app_nl_NL.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Voorraad Toewijzen", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "App release notities weergeven", "@appReleaseNotes": {}, "appSettings": "App Instellingen", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Verwijderen mislukt", "@deleteFailed": {}, + "deleteImageConfirmation": "Weet u zeker dat u deze afbeelding wilt verwijderen?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Afbeelding verwijderen", + "@deleteImageTooltip": {}, + "deleteImage": "Afbeelding verwijderen", + "@deleteImage": {}, "deletePart": "Onderdeel Verwijderen", "@deletePart": {}, "deletePartDetail": "Verwijder dit onderdeel uit de database", "@deletePartDetail": {}, "deleteSuccess": "Succesvol verwijderd", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Omschrijving", "@description": {}, "destination": "Bestemming:", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Inkooporder knop op startscherm weergeven", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Toon Verkooporders", "@homeShowSo": {}, "homeShowSoDescription": "Toon verkooporder knop op startscherm", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Ongeldige gebruikersnaam / wachtwoord combinatie", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Probleem", "@issue": {}, "issueDate": "Uitgiftedatum", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Naam", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Niet verbonden", "@notConnected": {}, "notes": "Opmerkingen", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "Geen afbeelding beschikbaar", "@noImageAvailable": {}, + "noPricingAvailable": "Geen prijzen beschikbaar", + "@noPricingAvailable": {}, + "noPricingDataFound": "Er zijn geen prijsgegevens gevonden voor dit deel", + "@noPricingDataFound": {}, "noSubcategories": "Geen Subcategorieën", "@noSubcategories": {}, "noSubcategoriesAvailable": "Geen subcategorieën beschikbaar", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "Wachtwoord mag niet leeg zijn", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "U heeft niet de vereiste rechten om deze actie uit te voeren", "@permissionAccountDenied": {}, "permissionRequired": "Toestemming Vereist", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Server niet geselecteerd", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Verzendingen", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Verzending toevoegen", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Verzonden", "@shipped": {}, "sku": "Artikelnummer", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Totaalprijs", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Verplaats", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Website", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Prijs", "@price": {}, "priceRange": "Prijs bereik", @@ -1141,15 +1197,5 @@ "currency": "Munteenheid", "@currency": {}, "priceBreaks": "Prijsverschillen", - "@priceBreaks": {}, - "noPricingAvailable": "Geen prijzen beschikbaar", - "@noPricingAvailable": {}, - "noPricingDataFound": "Er zijn geen prijsgegevens gevonden voor dit deel", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Weet u zeker dat u deze afbeelding wilt verwijderen?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Afbeelding verwijderen", - "@deleteImageTooltip": {}, - "deleteImage": "Afbeelding verwijderen", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/no_NO/app_no_NO.arb b/lib/l10n/no_NO/app_no_NO.arb index d454fd4c..408c72bc 100644 --- a/lib/l10n/no_NO/app_no_NO.arb +++ b/lib/l10n/no_NO/app_no_NO.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Tildel lagerbeholdning", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "Vis appens utgivelsesnotater", "@appReleaseNotes": {}, "appSettings": "Appinnstillinger", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Slettingen mislyktes", "@deleteFailed": {}, + "deleteImageConfirmation": "Are you sure you want to delete this image?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Delete Image", + "@deleteImageTooltip": {}, + "deleteImage": "Delete Image", + "@deleteImage": {}, "deletePart": "Slett del", "@deletePart": {}, "deletePartDetail": "Fjern denne delen fra databasen", "@deletePartDetail": {}, "deleteSuccess": "Sletting var vellykket", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Beskrivelse", "@description": {}, "destination": "Destinasjon", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Vis innkjøpsordre-knappen på startside", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Vis salgsordrer", "@homeShowSo": {}, "homeShowSoDescription": "Vis salgsordre-knappen på startside", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Ugyldig brukernavn- / passordkombinasjon", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Send", "@issue": {}, "issueDate": "Sendt dato", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Navn", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Ikke tilkoblet", "@notConnected": {}, "notes": "Notater", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "No image available", "@noImageAvailable": {}, + "noPricingAvailable": "No pricing available", + "@noPricingAvailable": {}, + "noPricingDataFound": "No pricing data found for this part", + "@noPricingDataFound": {}, "noSubcategories": "Ingen underkategorier", "@noSubcategories": {}, "noSubcategoriesAvailable": "Ingen underkategorier tilgjengelig", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "Passordet kan ikke være tomt", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "Kontoen din har ikke tillatelse til å utføre denne handlingen", "@permissionAccountDenied": {}, "permissionRequired": "Tillatelse kreves", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Server ikke valgt", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Forsendelser", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Legg til forsendelse", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Sendt", "@shipped": {}, "sku": "SKU-kode", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Total pris", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Overfør", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Nettside", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Price", "@price": {}, "priceRange": "Price Range", @@ -1141,15 +1197,5 @@ "currency": "Currency", "@currency": {}, "priceBreaks": "Price Breaks", - "@priceBreaks": {}, - "noPricingAvailable": "No pricing available", - "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", - "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/pl_PL/app_pl_PL.arb b/lib/l10n/pl_PL/app_pl_PL.arb index 72c5c7f7..8b8ac2a2 100644 --- a/lib/l10n/pl_PL/app_pl_PL.arb +++ b/lib/l10n/pl_PL/app_pl_PL.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Przydziel zapasy", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "Wyświetl informacje o historii aktualizacji", "@appReleaseNotes": {}, "appSettings": "Ustawienia aplikacji", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Usuwanie nie powiodło się", "@deleteFailed": {}, + "deleteImageConfirmation": "Czy na pewno chcesz usunąć ten obraz?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Usuń obraz", + "@deleteImageTooltip": {}, + "deleteImage": "Usuń obraz", + "@deleteImage": {}, "deletePart": "Usuń Komponent", "@deletePart": {}, "deletePartDetail": "Usuń ten komponent z bazy danych", "@deletePartDetail": {}, "deleteSuccess": "Usuwanie zakończone powodzeniem", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Opis", "@description": {}, "destination": "Cel:", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Pokaż przycisk zamówienia zakupu na ekranie głównym", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Pokaż zlecenia sprzedaży", "@homeShowSo": {}, "homeShowSoDescription": "Pokaż przycisk zleceń sprzedaży na ekrani głównym", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Nieprawidłowy login lub hasło", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Problem", "@issue": {}, "issueDate": "Data Wystawienia", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Nazwa", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Nie połączony", "@notConnected": {}, "notes": "Notatki", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "Brak dostępnych obrazów", "@noImageAvailable": {}, + "noPricingAvailable": "Cena nie jest dostępna", + "@noPricingAvailable": {}, + "noPricingDataFound": "Nie znaleziono danych dotyczących cen dla tej części", + "@noPricingDataFound": {}, "noSubcategories": "Brak podkategorii", "@noSubcategories": {}, "noSubcategoriesAvailable": "Brak dostępnych podkategorii", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "Hasło nie może być puste", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "Nie masz wystarczających uprawnień do wykonania tej czynności", "@permissionAccountDenied": {}, "permissionRequired": "Wymagane uprawnienia", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Serwer nie wybrany", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Wysyłki", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Dodaj wysyłkę", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Wysłano", "@shipped": {}, "sku": "SKU", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Cena całkowita", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Przenieś", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Strona WWW", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Cena", "@price": {}, "priceRange": "Zakres cen", @@ -1141,15 +1197,5 @@ "currency": "Waluta", "@currency": {}, "priceBreaks": "Price Breaks", - "@priceBreaks": {}, - "noPricingAvailable": "Cena nie jest dostępna", - "@noPricingAvailable": {}, - "noPricingDataFound": "Nie znaleziono danych dotyczących cen dla tej części", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Czy na pewno chcesz usunąć ten obraz?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Usuń obraz", - "@deleteImageTooltip": {}, - "deleteImage": "Usuń obraz", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/pt_BR/app_pt_BR.arb b/lib/l10n/pt_BR/app_pt_BR.arb index 7f67a03a..7e715d69 100644 --- a/lib/l10n/pt_BR/app_pt_BR.arb +++ b/lib/l10n/pt_BR/app_pt_BR.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Estoque alocado", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "Exibir notas de versão do aplicativo", "@appReleaseNotes": {}, "appSettings": "Configurações do App", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "A operação de apagar falhou", "@deleteFailed": {}, + "deleteImageConfirmation": "Tem certeza de que deseja excluir essa imagem?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Excluir Imagem", + "@deleteImageTooltip": {}, + "deleteImage": "Excluir Imagem", + "@deleteImage": {}, "deletePart": "Deletar Peça", "@deletePart": {}, "deletePartDetail": "Remova essa peça do banco de dados", "@deletePartDetail": {}, "deleteSuccess": "Apagado com Sucesso", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Descrição", "@description": {}, "destination": "Destino", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Mostrar botão de ordem de compra na tela inicial", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Mostrar Pedidos de Venda", "@homeShowSo": {}, "homeShowSoDescription": "Mostrar Pedidos de Venda na tela inicial", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Usuario ou senha invalidos", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Emitir", "@issue": {}, "issueDate": "Data de emissao", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Nome", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Nao conectado", "@notConnected": {}, "notes": "Notas", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "Nenhuma imagem disponível", "@noImageAvailable": {}, + "noPricingAvailable": "Nenhum preço disponível", + "@noPricingAvailable": {}, + "noPricingDataFound": "No pricing data found for this part", + "@noPricingDataFound": {}, "noSubcategories": "Nenhuma subcategoria", "@noSubcategories": {}, "noSubcategoriesAvailable": "Nenhuma subcategoria disponível", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "A senha não pode estar em branco", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "Sua conta não possui as permissões necessárias para realizar esta ação", "@permissionAccountDenied": {}, "permissionRequired": "Permissão Necessária", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Servidor não selecionado", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Envios", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Adicionar envio", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Enviado", "@shipped": {}, "sku": "Código (SKU)", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Preço Total", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Transferir", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Página Web", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Preço", "@price": {}, "priceRange": "Faixa de Preço", @@ -1141,15 +1197,5 @@ "currency": "Moeda", "@currency": {}, "priceBreaks": "Quebra de Preço", - "@priceBreaks": {}, - "noPricingAvailable": "Nenhum preço disponível", - "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Tem certeza de que deseja excluir essa imagem?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Excluir Imagem", - "@deleteImageTooltip": {}, - "deleteImage": "Excluir Imagem", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/pt_PT/app_pt_PT.arb b/lib/l10n/pt_PT/app_pt_PT.arb index 4c9478bc..ef86447d 100644 --- a/lib/l10n/pt_PT/app_pt_PT.arb +++ b/lib/l10n/pt_PT/app_pt_PT.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Alocar estoque", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "Exibir notas de versão do aplicativo", "@appReleaseNotes": {}, "appSettings": "Configurações do App", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Falha ao excluir", "@deleteFailed": {}, + "deleteImageConfirmation": "Are you sure you want to delete this image?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Delete Image", + "@deleteImageTooltip": {}, + "deleteImage": "Delete Image", + "@deleteImage": {}, "deletePart": "Excluir esta parte", "@deletePart": {}, "deletePartDetail": "Remover esta peça da base de dados", "@deletePartDetail": {}, "deleteSuccess": "Excluído com sucesso", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Descrição", "@description": {}, "destination": "Destino", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Mostrar botão de pedido de compra na tela inicial", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Mostrar Pedidos de Vendas", "@homeShowSo": {}, "homeShowSoDescription": "Mostrar botão de pedido de compra na tela inicial", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "O nome de utilizador ou a palavra-passe não estão corretos", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Erro", "@issue": {}, "issueDate": "Data de emissão", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Name", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Not Connected", "@notConnected": {}, "notes": "Notes", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "No image available", "@noImageAvailable": {}, + "noPricingAvailable": "No pricing available", + "@noPricingAvailable": {}, + "noPricingDataFound": "No pricing data found for this part", + "@noPricingDataFound": {}, "noSubcategories": "No Subcategories", "@noSubcategories": {}, "noSubcategoriesAvailable": "No subcategories available", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "A palavra-passe não pode estar vazia", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "A sua conta não tem as permissões necessárias para executar esta ação", "@permissionAccountDenied": {}, "permissionRequired": "Permissão necessária", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Server not selected", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Shipments", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Add Shipment", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Shipped", "@shipped": {}, "sku": "SKU", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Total Price", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Transfer", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Website", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Price", "@price": {}, "priceRange": "Price Range", @@ -1141,15 +1197,5 @@ "currency": "Currency", "@currency": {}, "priceBreaks": "Price Breaks", - "@priceBreaks": {}, - "noPricingAvailable": "No pricing available", - "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", - "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/ro_RO/app_ro_RO.arb b/lib/l10n/ro_RO/app_ro_RO.arb index e3c54e95..62167efb 100644 --- a/lib/l10n/ro_RO/app_ro_RO.arb +++ b/lib/l10n/ro_RO/app_ro_RO.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Alocare Stoc", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "Afișează notele de lansare a aplicației", "@appReleaseNotes": {}, "appSettings": "Setări Aplicație", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Operațiune de ștergere eșuată", "@deleteFailed": {}, + "deleteImageConfirmation": "Are you sure you want to delete this image?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Delete Image", + "@deleteImageTooltip": {}, + "deleteImage": "Delete Image", + "@deleteImage": {}, "deletePart": "Șterge Piesa", "@deletePart": {}, "deletePartDetail": "Elimină această piesă din baza de date", "@deletePartDetail": {}, "deleteSuccess": "Operație de ștergere reușită", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Descriere", "@description": {}, "destination": "Destinație", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Afișați butonul de achiziții pe ecranul principal", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Arată Comenzile de Vânzări", "@homeShowSo": {}, "homeShowSoDescription": "Afișare buton vânzări pe ecranul principal", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Combinație de nume utilizator / parolă invalida", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Problemă", "@issue": {}, "issueDate": "Data emiterii", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Nume", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Neconectat", "@notConnected": {}, "notes": "Notițe", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "No image available", "@noImageAvailable": {}, + "noPricingAvailable": "No pricing available", + "@noPricingAvailable": {}, + "noPricingDataFound": "No pricing data found for this part", + "@noPricingDataFound": {}, "noSubcategories": "Nu există subcategorii", "@noSubcategories": {}, "noSubcategoriesAvailable": "Nicio subcategorie disponibilă", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "Câmpul pentru Parola nu poate fi gol", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "Contul dvs. nu are permisiunile necesare pentru a efectua această acțiune", "@permissionAccountDenied": {}, "permissionRequired": "Permisiune necesară", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Server not selected", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Shipments", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Add Shipment", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Shipped", "@shipped": {}, "sku": "SKU", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Total Price", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Transfer", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Website", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Price", "@price": {}, "priceRange": "Price Range", @@ -1141,15 +1197,5 @@ "currency": "Currency", "@currency": {}, "priceBreaks": "Price Breaks", - "@priceBreaks": {}, - "noPricingAvailable": "No pricing available", - "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", - "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/ru_RU/app_ru_RU.arb b/lib/l10n/ru_RU/app_ru_RU.arb index bbc7cc54..800335e6 100644 --- a/lib/l10n/ru_RU/app_ru_RU.arb +++ b/lib/l10n/ru_RU/app_ru_RU.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Выделить запас", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "Показать заметки о выпуске приложения", "@appReleaseNotes": {}, "appSettings": "Настройки приложения", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Ошибка удаления", "@deleteFailed": {}, + "deleteImageConfirmation": "Вы уверены, что хотите удалить изображение?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Удалить изображение", + "@deleteImageTooltip": {}, + "deleteImage": "Удалить изображение", + "@deleteImage": {}, "deletePart": "Удалить деталь", "@deletePart": {}, "deletePartDetail": "Удалить эту деталь из базы данных", "@deletePartDetail": {}, "deleteSuccess": "Удаление успешно завершено", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Описание", "@description": {}, "destination": "Назначение", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Показывать кнопку заказа на главном экране", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Показать заказы на продажу", "@homeShowSo": {}, "homeShowSoDescription": "Показывать кнопку заказов на продажу на главном экране", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Неверная комбинация имени пользователя и пароля", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Оформить", "@issue": {}, "issueDate": "Дата проблемы", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Название", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Соединение не установлено", "@notConnected": {}, "notes": "Заметки", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "Нет доступного изображения", "@noImageAvailable": {}, + "noPricingAvailable": "Нет данных о цене", + "@noPricingAvailable": {}, + "noPricingDataFound": "Для этой детали не найдены данные о ценах", + "@noPricingDataFound": {}, "noSubcategories": "Нет подкатегории", "@noSubcategories": {}, "noSubcategoriesAvailable": "Нет доступных подкатегорий", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "Пароль не может быть пустым", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "Ваш аккаунт не имеет разрешения на выполнение этого действия", "@permissionAccountDenied": {}, "permissionRequired": "Требуется разрешение", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Сервер не выбран", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Поставки", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Новое Отправление", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Отгружено", "@shipped": {}, "sku": "SKU", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Общая стоимость", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Перемещение", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Сайт", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Цена", "@price": {}, "priceRange": "Диапазон цен", @@ -1141,15 +1197,5 @@ "currency": "Валюта", "@currency": {}, "priceBreaks": "Разбивка по ценам", - "@priceBreaks": {}, - "noPricingAvailable": "Нет данных о цене", - "@noPricingAvailable": {}, - "noPricingDataFound": "Для этой детали не найдены данные о ценах", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Вы уверены, что хотите удалить изображение?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Удалить изображение", - "@deleteImageTooltip": {}, - "deleteImage": "Удалить изображение", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/sk_SK/app_sk_SK.arb b/lib/l10n/sk_SK/app_sk_SK.arb index 5e98aa32..a7d26a48 100644 --- a/lib/l10n/sk_SK/app_sk_SK.arb +++ b/lib/l10n/sk_SK/app_sk_SK.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Allocate Stock", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "Display app release notes", "@appReleaseNotes": {}, "appSettings": "App Settings", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Delete operation failed", "@deleteFailed": {}, + "deleteImageConfirmation": "Are you sure you want to delete this image?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Delete Image", + "@deleteImageTooltip": {}, + "deleteImage": "Delete Image", + "@deleteImage": {}, "deletePart": "Delete Part", "@deletePart": {}, "deletePartDetail": "Remove this part from the database", "@deletePartDetail": {}, "deleteSuccess": "Delete operation successful", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Description", "@description": {}, "destination": "Destination", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Show purchase order button on home screen", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Show Sales Orders", "@homeShowSo": {}, "homeShowSoDescription": "Show sales order button on home screen", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Invalid username / password combination", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Issue", "@issue": {}, "issueDate": "Issue Date", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Name", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Not Connected", "@notConnected": {}, "notes": "Notes", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "No image available", "@noImageAvailable": {}, + "noPricingAvailable": "No pricing available", + "@noPricingAvailable": {}, + "noPricingDataFound": "No pricing data found for this part", + "@noPricingDataFound": {}, "noSubcategories": "No Subcategories", "@noSubcategories": {}, "noSubcategoriesAvailable": "No subcategories available", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "Password cannot be empty", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "Your account does not have the required permissions to perform this action", "@permissionAccountDenied": {}, "permissionRequired": "Permission Required", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Server not selected", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Shipments", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Add Shipment", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Shipped", "@shipped": {}, "sku": "SKU", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Total Price", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Transfer", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Website", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Price", "@price": {}, "priceRange": "Price Range", @@ -1141,15 +1197,5 @@ "currency": "Currency", "@currency": {}, "priceBreaks": "Price Breaks", - "@priceBreaks": {}, - "noPricingAvailable": "No pricing available", - "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", - "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/sl_SI/app_sl_SI.arb b/lib/l10n/sl_SI/app_sl_SI.arb index e82b80f2..3ca87300 100644 --- a/lib/l10n/sl_SI/app_sl_SI.arb +++ b/lib/l10n/sl_SI/app_sl_SI.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Allocate Stock", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "Display app release notes", "@appReleaseNotes": {}, "appSettings": "App Settings", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Delete operation failed", "@deleteFailed": {}, + "deleteImageConfirmation": "Are you sure you want to delete this image?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Delete Image", + "@deleteImageTooltip": {}, + "deleteImage": "Delete Image", + "@deleteImage": {}, "deletePart": "Delete Part", "@deletePart": {}, "deletePartDetail": "Remove this part from the database", "@deletePartDetail": {}, "deleteSuccess": "Delete operation successful", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Description", "@description": {}, "destination": "Destination", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Show purchase order button on home screen", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Show Sales Orders", "@homeShowSo": {}, "homeShowSoDescription": "Show sales order button on home screen", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Invalid username / password combination", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Issue", "@issue": {}, "issueDate": "Issue Date", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Name", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Not Connected", "@notConnected": {}, "notes": "Notes", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "No image available", "@noImageAvailable": {}, + "noPricingAvailable": "No pricing available", + "@noPricingAvailable": {}, + "noPricingDataFound": "No pricing data found for this part", + "@noPricingDataFound": {}, "noSubcategories": "No Subcategories", "@noSubcategories": {}, "noSubcategoriesAvailable": "No subcategories available", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "Password cannot be empty", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "Your account does not have the required permissions to perform this action", "@permissionAccountDenied": {}, "permissionRequired": "Permission Required", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Server not selected", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Shipments", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Add Shipment", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Shipped", "@shipped": {}, "sku": "SKU", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Total Price", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Transfer", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Website", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Price", "@price": {}, "priceRange": "Price Range", @@ -1141,15 +1197,5 @@ "currency": "Currency", "@currency": {}, "priceBreaks": "Price Breaks", - "@priceBreaks": {}, - "noPricingAvailable": "No pricing available", - "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", - "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/sr_CS/app_sr_CS.arb b/lib/l10n/sr_CS/app_sr_CS.arb index 856048e9..c3e9f4b0 100644 --- a/lib/l10n/sr_CS/app_sr_CS.arb +++ b/lib/l10n/sr_CS/app_sr_CS.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Alociraj zalihe", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "Prikaži informacije o aplikaciji", "@appReleaseNotes": {}, "appSettings": "Podešavanja aplikacije", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Neuspešna operacija brisanja", "@deleteFailed": {}, + "deleteImageConfirmation": "Are you sure you want to delete this image?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Delete Image", + "@deleteImageTooltip": {}, + "deleteImage": "Delete Image", + "@deleteImage": {}, "deletePart": "Obriši deo", "@deletePart": {}, "deletePartDetail": "Ukloni ovaj deo iz baze podataka", "@deletePartDetail": {}, "deleteSuccess": "Operacija brisanja uspešna", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Opis", "@description": {}, "destination": "Odredište", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Show purchase order button on home screen", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Show Sales Orders", "@homeShowSo": {}, "homeShowSoDescription": "Show sales order button on home screen", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Invalid username / password combination", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Issue", "@issue": {}, "issueDate": "Datum izdavanja", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Ime", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Nije povezano", "@notConnected": {}, "notes": "Beleške", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "No image available", "@noImageAvailable": {}, + "noPricingAvailable": "No pricing available", + "@noPricingAvailable": {}, + "noPricingDataFound": "No pricing data found for this part", + "@noPricingDataFound": {}, "noSubcategories": "Nema podkategorija", "@noSubcategories": {}, "noSubcategoriesAvailable": "Nema dostupnih podkategorija", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "Password cannot be empty", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "Your account does not have the required permissions to perform this action", "@permissionAccountDenied": {}, "permissionRequired": "Permission Required", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Server not selected", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Shipments", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Add Shipment", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Shipped", "@shipped": {}, "sku": "SKU", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Total Price", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Transfer", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Website", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Price", "@price": {}, "priceRange": "Price Range", @@ -1141,15 +1197,5 @@ "currency": "Currency", "@currency": {}, "priceBreaks": "Price Breaks", - "@priceBreaks": {}, - "noPricingAvailable": "No pricing available", - "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", - "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/sv_SE/app_sv_SE.arb b/lib/l10n/sv_SE/app_sv_SE.arb index 14b3b901..30e561c0 100644 --- a/lib/l10n/sv_SE/app_sv_SE.arb +++ b/lib/l10n/sv_SE/app_sv_SE.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Allokera lager", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "Visa versionsinfo för app", "@appReleaseNotes": {}, "appSettings": "Appinställningar", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Borttagning misslyckades", "@deleteFailed": {}, + "deleteImageConfirmation": "Are you sure you want to delete this image?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Delete Image", + "@deleteImageTooltip": {}, + "deleteImage": "Delete Image", + "@deleteImage": {}, "deletePart": "Ta bort del", "@deletePart": {}, "deletePartDetail": "Ta bort denna del från databasen", "@deletePartDetail": {}, "deleteSuccess": "Borttagning lyckad", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Beskrivning", "@description": {}, "destination": "Destination", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Visa knappen för inköpsorder på startskärmen", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Visa försäljningsorder", "@homeShowSo": {}, "homeShowSoDescription": "Visa knappen för försäljningsorder på startskärmen", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Felaktigt användarnamn / lösenord kombination", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Ärende", "@issue": {}, "issueDate": "Utfärdad datum", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Namn", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Ej ansluten", "@notConnected": {}, "notes": "Anteckningar", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "Ingen bild tillgänglig", "@noImageAvailable": {}, + "noPricingAvailable": "No pricing available", + "@noPricingAvailable": {}, + "noPricingDataFound": "No pricing data found for this part", + "@noPricingDataFound": {}, "noSubcategories": "Inga underkategorier", "@noSubcategories": {}, "noSubcategoriesAvailable": "Inga underkategorier tillgängliga", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "Lösenordet får inte vara tomt", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "Ditt konto har inte de rättigheter som krävs för att utföra denna åtgärd", "@permissionAccountDenied": {}, "permissionRequired": "Särskilda behörigheter krävs", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Servern är inte vald", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Frakt", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Lägg till frakt", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Skickad", "@shipped": {}, "sku": "SKU", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Totalpris", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Överföring", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Webbplats", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Price", "@price": {}, "priceRange": "Price Range", @@ -1141,15 +1197,5 @@ "currency": "Currency", "@currency": {}, "priceBreaks": "Price Breaks", - "@priceBreaks": {}, - "noPricingAvailable": "No pricing available", - "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", - "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/th_TH/app_th_TH.arb b/lib/l10n/th_TH/app_th_TH.arb index c97b24cb..2206a8ce 100644 --- a/lib/l10n/th_TH/app_th_TH.arb +++ b/lib/l10n/th_TH/app_th_TH.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "จัดสรรคลัง", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "แสดงข้อมูลรุ่นของโปรแกรม", "@appReleaseNotes": {}, "appSettings": "การตั้งค่าแอปพลิเคชั่น", @@ -86,7 +88,7 @@ "@barcodeAssigned": {}, "barcodeError": "สแกนบาร์โค้ดผิดพลาด", "@barcodeError": {}, - "barcodeInUse": "Barcode already assigned", + "barcodeInUse": "", "@barcodeInUse": {}, "barcodeMissingHash": "Barcode hash data missing from response", "@barcodeMissingHash": {}, @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Delete operation failed", "@deleteFailed": {}, + "deleteImageConfirmation": "Are you sure you want to delete this image?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Delete Image", + "@deleteImageTooltip": {}, + "deleteImage": "Delete Image", + "@deleteImage": {}, "deletePart": "Delete Part", "@deletePart": {}, "deletePartDetail": "Remove this part from the database", "@deletePartDetail": {}, "deleteSuccess": "Delete operation successful", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Description", "@description": {}, "destination": "Destination", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Show purchase order button on home screen", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Show Sales Orders", "@homeShowSo": {}, "homeShowSoDescription": "Show sales order button on home screen", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Invalid username / password combination", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Issue", "@issue": {}, "issueDate": "Issue Date", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Name", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Not Connected", "@notConnected": {}, "notes": "Notes", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "No image available", "@noImageAvailable": {}, + "noPricingAvailable": "No pricing available", + "@noPricingAvailable": {}, + "noPricingDataFound": "No pricing data found for this part", + "@noPricingDataFound": {}, "noSubcategories": "No Subcategories", "@noSubcategories": {}, "noSubcategoriesAvailable": "No subcategories available", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "Password cannot be empty", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "Your account does not have the required permissions to perform this action", "@permissionAccountDenied": {}, "permissionRequired": "Permission Required", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Server not selected", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Shipments", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Add Shipment", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Shipped", "@shipped": {}, "sku": "SKU", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Total Price", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Transfer", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Website", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Price", "@price": {}, "priceRange": "Price Range", @@ -1141,15 +1197,5 @@ "currency": "Currency", "@currency": {}, "priceBreaks": "Price Breaks", - "@priceBreaks": {}, - "noPricingAvailable": "No pricing available", - "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", - "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/tr_TR/app_tr_TR.arb b/lib/l10n/tr_TR/app_tr_TR.arb index 8430f4c1..8e240146 100644 --- a/lib/l10n/tr_TR/app_tr_TR.arb +++ b/lib/l10n/tr_TR/app_tr_TR.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Tahsisli stok", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "Uygulama yayınlama notlarını göster", "@appReleaseNotes": {}, "appSettings": "Uygulama Ayarları", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Silme işlemi başarısız", "@deleteFailed": {}, + "deleteImageConfirmation": "Bu resmi silmek istediğinizden emin misiniz?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Görüntüyü Sil", + "@deleteImageTooltip": {}, + "deleteImage": "Resmi sil", + "@deleteImage": {}, "deletePart": "Parça Sil", "@deletePart": {}, "deletePartDetail": "Bu parçayı veritabanından kaldır", "@deletePartDetail": {}, "deleteSuccess": "Silme işlemi başarılı", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Açıklama", "@description": {}, "destination": "Varış Yeri", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Satınalma sipariş butonunu ana ekranda göster", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Satış Siparişlerini Göster", "@homeShowSo": {}, "homeShowSoDescription": "Satış siparişleri tuşunu giriş ekranında göster", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Geçersiz kullanıcı adı ve şifre", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Sorun", "@issue": {}, "issueDate": "Sorun Tarihi", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Adı", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Bağlı değil", "@notConnected": {}, "notes": "Notlar", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "Kullanılabilir resim yok", "@noImageAvailable": {}, + "noPricingAvailable": "Fiyatlandırma mevcut değil", + "@noPricingAvailable": {}, + "noPricingDataFound": "Bu parça için fiyatlandırma verisi bulunamadı", + "@noPricingDataFound": {}, "noSubcategories": "Alt kategori yok", "@noSubcategories": {}, "noSubcategoriesAvailable": "Uygun alt kategori yok", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "Parola boş bırakılamaz", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "Bu eylemi gerçekleştirmek için gerekli yetkiye sahip değilsiniz", "@permissionAccountDenied": {}, "permissionRequired": "İzin Gerekli", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Sunucu bulunamadı", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Gönderiler", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Gönderi Ekle", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Gönderildi", "@shipped": {}, "sku": "SKU", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Toplam Fiyat", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Aktarım", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Web sitesi", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Fiyat", "@price": {}, "priceRange": "Fiyat Aralığı", @@ -1141,15 +1197,5 @@ "currency": "Para Birimi", "@currency": {}, "priceBreaks": "Fiyat Aralığı", - "@priceBreaks": {}, - "noPricingAvailable": "Fiyatlandırma mevcut değil", - "@noPricingAvailable": {}, - "noPricingDataFound": "Bu parça için fiyatlandırma verisi bulunamadı", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Bu resmi silmek istediğinizden emin misiniz?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Görüntüyü Sil", - "@deleteImageTooltip": {}, - "deleteImage": "Resmi sil", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/uk_UA/app_uk_UA.arb b/lib/l10n/uk_UA/app_uk_UA.arb index 94a669fc..6947b489 100644 --- a/lib/l10n/uk_UA/app_uk_UA.arb +++ b/lib/l10n/uk_UA/app_uk_UA.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Виділити запас", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "Показати примітки до випуску", "@appReleaseNotes": {}, "appSettings": "Налаштування додатку", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Помилка видалення", "@deleteFailed": {}, + "deleteImageConfirmation": "Are you sure you want to delete this image?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Delete Image", + "@deleteImageTooltip": {}, + "deleteImage": "Delete Image", + "@deleteImage": {}, "deletePart": "Видалити деталь", "@deletePart": {}, "deletePartDetail": "Видалити цю частину з бази даних", "@deletePartDetail": {}, "deleteSuccess": "Операція видалення пройшла успішно", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Опис", "@description": {}, "destination": "Місце призначення", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Показувати кнопку замовлення на домашньому екрані", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Показати замовлення", "@homeShowSo": {}, "homeShowSoDescription": "Показувати кнопку замовлення на домашньому екрані", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Неправильна комбінація імені користувача та пароля", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Issue", "@issue": {}, "issueDate": "Issue Date", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Назва", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Не під’єднано", "@notConnected": {}, "notes": "Нотатки", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "Немає доступного зображення", "@noImageAvailable": {}, + "noPricingAvailable": "No pricing available", + "@noPricingAvailable": {}, + "noPricingDataFound": "No pricing data found for this part", + "@noPricingDataFound": {}, "noSubcategories": "No Subcategories", "@noSubcategories": {}, "noSubcategoriesAvailable": "No subcategories available", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "Пароль не може бути порожнім", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "Ваш обліковий запис не має необхідних прав для виконання цієї дії", "@permissionAccountDenied": {}, "permissionRequired": "Потрібен дозвіл", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Сервер не вибраний", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Shipments", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Add Shipment", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Відправлено", "@shipped": {}, "sku": "SKU", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Total Price", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Transfer", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Website", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Price", "@price": {}, "priceRange": "Price Range", @@ -1141,15 +1197,5 @@ "currency": "Currency", "@currency": {}, "priceBreaks": "Price Breaks", - "@priceBreaks": {}, - "noPricingAvailable": "No pricing available", - "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", - "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/vi_VN/app_vi_VN.arb b/lib/l10n/vi_VN/app_vi_VN.arb index cca60715..8639cdbb 100644 --- a/lib/l10n/vi_VN/app_vi_VN.arb +++ b/lib/l10n/vi_VN/app_vi_VN.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "Phân kho", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "Hiển thị ghi chú phát hành ứng dụng", "@appReleaseNotes": {}, "appSettings": "Cài đặt ứng dụng", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "Thao tác xóa đã thất bại", "@deleteFailed": {}, + "deleteImageConfirmation": "Are you sure you want to delete this image?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Delete Image", + "@deleteImageTooltip": {}, + "deleteImage": "Delete Image", + "@deleteImage": {}, "deletePart": "Xóa phần", "@deletePart": {}, "deletePartDetail": "Xóa một phần ra khỏi cơ sở dữ liệu", "@deletePartDetail": {}, "deleteSuccess": "Thao tác xóa thành công", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "Mô tả", "@description": {}, "destination": "Destination", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "Hiển thị đơn hàng mới tại màn hình chính", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "Hiện đơn hàng bán", "@homeShowSo": {}, "homeShowSoDescription": "Hiện nút đơn hàng bán tại màn hình trang chủ", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Tên người dùng / mật khẩu không hợp lệ", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "Vấn đề", "@issue": {}, "issueDate": "Ngày phát hành", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "Tên", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "Không được kết nối", "@notConnected": {}, "notes": "Ghi chú", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "No image available", "@noImageAvailable": {}, + "noPricingAvailable": "No pricing available", + "@noPricingAvailable": {}, + "noPricingDataFound": "No pricing data found for this part", + "@noPricingDataFound": {}, "noSubcategories": "Không có danh mục con", "@noSubcategories": {}, "noSubcategoriesAvailable": "Không có sẵn danh mục", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "Mật khẩu không được để trống", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "Tài khoản này bắt buộc phải có đủ các quyền để thực hiện thao tác này", "@permissionAccountDenied": {}, "permissionRequired": "Yêu cầu quyền truy cập", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "Chưa chọn máy chủ", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "Vận chuyển", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "Thêm phương thức vận chuyển", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "Đã vận chuyển", "@shipped": {}, "sku": "Mã sản phẩm", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Tổng tiền", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "Chuyển", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "Trang web", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Price", "@price": {}, "priceRange": "Price Range", @@ -1141,15 +1197,5 @@ "currency": "Currency", "@currency": {}, "priceBreaks": "Price Breaks", - "@priceBreaks": {}, - "noPricingAvailable": "No pricing available", - "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", - "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/zh_CN/app_zh_CN.arb b/lib/l10n/zh_CN/app_zh_CN.arb index 84422dd6..207089cd 100644 --- a/lib/l10n/zh_CN/app_zh_CN.arb +++ b/lib/l10n/zh_CN/app_zh_CN.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "分配库存", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "显示应用发布笔记", "@appReleaseNotes": {}, "appSettings": "应用设置", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "删除操作失败", "@deleteFailed": {}, + "deleteImageConfirmation": "您确认要删除此图片吗?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "删除图片", + "@deleteImageTooltip": {}, + "deleteImage": "删除图片", + "@deleteImage": {}, "deletePart": "删除零件", "@deletePart": {}, "deletePartDetail": "从数据库中删除此零件", "@deletePartDetail": {}, "deleteSuccess": "删除操作成功", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "描述", "@description": {}, "destination": "目的地", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "在主屏幕上显示订单按钮", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "显示销售订单", "@homeShowSo": {}, "homeShowSoDescription": "在主屏幕上显示销售订单按钮", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "无效的用户名密码组合", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "下单任务", "@issue": {}, "issueDate": "签发日期", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "名称", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "未连接", "@notConnected": {}, "notes": "注释", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "没有可用的图片", "@noImageAvailable": {}, + "noPricingAvailable": "无可用价格", + "@noPricingAvailable": {}, + "noPricingDataFound": "未找到此零件的定价数据", + "@noPricingDataFound": {}, "noSubcategories": "无子类别", "@noSubcategories": {}, "noSubcategoriesAvailable": "无可用子类别", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "密码不能为空", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "您的账户没有执行此操作所需的权限", "@permissionAccountDenied": {}, "permissionRequired": "需要授权:", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "未选定服务器", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "配送", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "添加配送", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "已配送", "@shipped": {}, "sku": "库存单位 (SKU)", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "总价", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "转移", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "网站", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "价格", "@price": {}, "priceRange": "价格范围", @@ -1141,15 +1197,5 @@ "currency": "币种", "@currency": {}, "priceBreaks": "批发价", - "@priceBreaks": {}, - "noPricingAvailable": "无可用价格", - "@noPricingAvailable": {}, - "noPricingDataFound": "未找到此零件的定价数据", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "您确认要删除此图片吗?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "删除图片", - "@deleteImageTooltip": {}, - "deleteImage": "删除图片", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/zh_TW/app_zh_TW.arb b/lib/l10n/zh_TW/app_zh_TW.arb index 8a0a3274..6d6f300d 100644 --- a/lib/l10n/zh_TW/app_zh_TW.arb +++ b/lib/l10n/zh_TW/app_zh_TW.arb @@ -46,6 +46,8 @@ "@aspectRatioSquare": {}, "allocateStock": "分配庫存", "@allocateStock": {}, + "allocatedStock": "Allocated Stock", + "@allocatedStock": {}, "appReleaseNotes": "顯示應用程式發布說明", "@appReleaseNotes": {}, "appSettings": "程式設定", @@ -226,12 +228,20 @@ "@delete": {}, "deleteFailed": "刪除失敗", "@deleteFailed": {}, + "deleteImageConfirmation": "Are you sure you want to delete this image?", + "@deleteImageConfirmation": {}, + "deleteImageTooltip": "Delete Image", + "@deleteImageTooltip": {}, + "deleteImage": "Delete Image", + "@deleteImage": {}, "deletePart": "刪除零件", "@deletePart": {}, "deletePartDetail": "從數據庫中刪除此零件", "@deletePartDetail": {}, "deleteSuccess": "刪除成功", "@deleteSuccess": {}, + "deliveryDate": "Delivery Date", + "@deliveryDate": {}, "description": "敘述", "@description": {}, "destination": "Destination", @@ -374,6 +384,10 @@ "@homeShowPo": {}, "homeShowPoDescription": "在主屏幕上顯示訂單按鈕", "@homeShowPoDescription": {}, + "homeShowShipments": "Show Shipments", + "@homeShowShipments": {}, + "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "@homeShowShipmentsDescription": {}, "homeShowSo": "顯示銷售訂單", "@homeShowSo": {}, "homeShowSoDescription": "在主屏幕上顯示銷售訂單按鈕", @@ -440,6 +454,10 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "無效的用户名密碼組合", "@invalidUsernamePassword": {}, + "invoice": "Invoice", + "@invoice": {}, + "invoiceNumber": "Invoice Number", + "@invoiceNumber": {}, "issue": "發行", "@issue": {}, "issueDate": "發行日期", @@ -520,6 +538,10 @@ "@missingData": {}, "name": "名稱", "@name": {}, + "no": "No", + "@no": {}, + "notApplicable": "N/A", + "@notApplicable": {}, "notConnected": "未連接", "@notConnected": {}, "notes": "備註", @@ -536,6 +558,10 @@ "@noResults": {}, "noImageAvailable": "No image available", "@noImageAvailable": {}, + "noPricingAvailable": "No pricing available", + "@noPricingAvailable": {}, + "noPricingDataFound": "No pricing data found for this part", + "@noPricingDataFound": {}, "noSubcategories": "無子類別", "@noSubcategories": {}, "noSubcategoriesAvailable": "無可用子類別", @@ -628,6 +654,8 @@ "@password": {}, "passwordEmpty": "密碼不能為空", "@passwordEmpty": {}, + "pending": "Pending", + "@pending": {}, "permissionAccountDenied": "您的賬户沒有執行此操作所需的權限", "@permissionAccountDenied": {}, "permissionRequired": "需要授權:", @@ -906,10 +934,34 @@ "@serverNotConnected": {}, "serverNotSelected": "未選定服務器", "@serverNotSelected": {}, + "shipment": "Shipment", + "@shipment": {}, "shipments": "配送", "@shipments": {}, + "shipmentsPending": "Pending Shipments", + "@shipmentsPending": {}, "shipmentAdd": "添加配送", "@shipmentAdd": {}, + "shipmentCheck": "Check Shipment", + "@shipmentCheck": {}, + "shipmentCheckDetail": "Mark this shipment as checked", + "@shipmentCheckDetail": {}, + "shipmentChecked": "Shipment Checked", + "@shipmentChecked": {}, + "shipmentDate": "Shipment Date", + "@shipmentDate": {}, + "shipmentEdit": "Edit Shipment", + "@shipmentEdit": {}, + "shipmentReference": "Shipment Reference", + "@shipmentReference": {}, + "shipmentSend": "Send Shipment", + "@shipmentSend": {}, + "shipmentUncheck": "Uncheck Shipment", + "@shipmentUncheck": {}, + "shipmentUncheckDetail": "Mark this shipment as unchecked", + "@shipmentUncheckDetail": {}, + "shipmentUpdated": "Shipment Updated", + "@shipmentUpdated": {}, "shipped": "已配送", "@shipped": {}, "sku": "庫存單位 (SKU)", @@ -1054,6 +1106,8 @@ "@tokenMissingFromResponse": {}, "totalPrice": "總價", "@totalPrice": {}, + "trackingNumber": "Tracking Number", + "@trackingNumber": {}, "transfer": "轉移", "@transfer": { "description": "transfer" @@ -1114,6 +1168,8 @@ "@viewSupplierPart": {}, "website": "網站", "@website": {}, + "yes": "Yes", + "@yes": {}, "price": "Price", "@price": {}, "priceRange": "Price Range", @@ -1141,15 +1197,5 @@ "currency": "Currency", "@currency": {}, "priceBreaks": "Price Breaks", - "@priceBreaks": {}, - "noPricingAvailable": "No pricing available", - "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", - "@noPricingDataFound": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", - "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", - "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", - "@deleteImage": {} + "@priceBreaks": {} } \ No newline at end of file From 2b68c305688fd159a643f42a197e64736c71f919 Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 29 Oct 2025 15:03:59 +1100 Subject: [PATCH 11/40] New translations app_en.arb (Portuguese) (#701) --- lib/l10n/pt_PT/app_pt_PT.arb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/l10n/pt_PT/app_pt_PT.arb b/lib/l10n/pt_PT/app_pt_PT.arb index ef86447d..de33d15c 100644 --- a/lib/l10n/pt_PT/app_pt_PT.arb +++ b/lib/l10n/pt_PT/app_pt_PT.arb @@ -600,7 +600,7 @@ "@parametersSettingDetail": {}, "parent": "Parent", "@parent": {}, - "parentCategory": "Parent Category", + "parentCategory": "Categoria Principal", "@parentCategory": {}, "parentLocation": "Parent Location", "@parentLocation": {}, From 2f8f42822aee3b7108ef5b22f4fb2647a2997983 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 31 Oct 2025 15:26:18 +1100 Subject: [PATCH 12/40] Possible fix for barcode scanner issues (#702) * Possible fix for barcode scanner issues Ref: https://github.com/juliansteenbakker/mobile_scanner/issues/1454#issuecomment-3329405748 * Bump release notes * Bump app revision --- assets/release_notes.md | 5 +++++ lib/barcode/camera_controller.dart | 1 + pubspec.yaml | 2 +- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/assets/release_notes.md b/assets/release_notes.md index 30206617..8f5daf99 100644 --- a/assets/release_notes.md +++ b/assets/release_notes.md @@ -1,3 +1,8 @@ +### 0.20.1 - October 2025 +--- + +- Bug fix for camera barcode scanner + ### 0.20.0 - October 2025 --- diff --git a/lib/barcode/camera_controller.dart b/lib/barcode/camera_controller.dart index ba73b10f..c4567210 100644 --- a/lib/barcode/camera_controller.dart +++ b/lib/barcode/camera_controller.dart @@ -55,6 +55,7 @@ class _CameraBarcodeControllerState extends InvenTreeBarcodeControllerState { @override void dispose() { super.dispose(); + controller.dispose(); WakelockPlus.disable(); } diff --git a/pubspec.yaml b/pubspec.yaml index 92de2677..e4100bfb 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: inventree description: InvenTree stock management -version: 0.20.0+103 +version: 0.20.1+104 environment: sdk: ^3.8.1 From 9083f195310c569569fe27d981a359972504c051 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 3 Nov 2025 20:33:54 +1100 Subject: [PATCH 13/40] New Crowdin updates (#703) * New translations app_en.arb (Chinese Simplified) * New translations app_en.arb (Swedish) * New translations app_en.arb (Swedish) --- lib/l10n/sv_SE/app_sv_SE.arb | 14 +++++------ lib/l10n/zh_CN/app_zh_CN.arb | 46 ++++++++++++++++++------------------ 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/lib/l10n/sv_SE/app_sv_SE.arb b/lib/l10n/sv_SE/app_sv_SE.arb index 30e561c0..4e5a2c8b 100644 --- a/lib/l10n/sv_SE/app_sv_SE.arb +++ b/lib/l10n/sv_SE/app_sv_SE.arb @@ -230,9 +230,9 @@ "@deleteFailed": {}, "deleteImageConfirmation": "Are you sure you want to delete this image?", "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", + "deleteImageTooltip": "Radera bild", "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", + "deleteImage": "Radera bild", "@deleteImage": {}, "deletePart": "Ta bort del", "@deletePart": {}, @@ -456,7 +456,7 @@ "@invalidUsernamePassword": {}, "invoice": "Invoice", "@invoice": {}, - "invoiceNumber": "Invoice Number", + "invoiceNumber": "Fakturanummer", "@invoiceNumber": {}, "issue": "Ärende", "@issue": {}, @@ -538,7 +538,7 @@ "@missingData": {}, "name": "Namn", "@name": {}, - "no": "No", + "no": "Nej", "@no": {}, "notApplicable": "N/A", "@notApplicable": {}, @@ -1142,7 +1142,7 @@ "@uploadFailed": {}, "uploadSuccess": "Fil har laddats upp", "@uploadSuccess": {}, - "uploadImage": "Upload Image", + "uploadImage": "Ladda upp bild", "@uploadImage": {}, "usedIn": "Används i", "@usedIn": {}, @@ -1168,9 +1168,9 @@ "@viewSupplierPart": {}, "website": "Webbplats", "@website": {}, - "yes": "Yes", + "yes": "Ja", "@yes": {}, - "price": "Price", + "price": "Pris", "@price": {}, "priceRange": "Price Range", "@priceRange": {}, diff --git a/lib/l10n/zh_CN/app_zh_CN.arb b/lib/l10n/zh_CN/app_zh_CN.arb index 207089cd..fb1bd417 100644 --- a/lib/l10n/zh_CN/app_zh_CN.arb +++ b/lib/l10n/zh_CN/app_zh_CN.arb @@ -46,7 +46,7 @@ "@aspectRatioSquare": {}, "allocateStock": "分配库存", "@allocateStock": {}, - "allocatedStock": "Allocated Stock", + "allocatedStock": "已分配库存", "@allocatedStock": {}, "appReleaseNotes": "显示应用发布笔记", "@appReleaseNotes": {}, @@ -240,7 +240,7 @@ "@deletePartDetail": {}, "deleteSuccess": "删除操作成功", "@deleteSuccess": {}, - "deliveryDate": "Delivery Date", + "deliveryDate": "交货日期", "@deliveryDate": {}, "description": "描述", "@description": {}, @@ -384,9 +384,9 @@ "@homeShowPo": {}, "homeShowPoDescription": "在主屏幕上显示订单按钮", "@homeShowPoDescription": {}, - "homeShowShipments": "Show Shipments", + "homeShowShipments": "显示货件", "@homeShowShipments": {}, - "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "homeShowShipmentsDescription": "在首页显示待处理货件", "@homeShowShipmentsDescription": {}, "homeShowSo": "显示销售订单", "@homeShowSo": {}, @@ -454,9 +454,9 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "无效的用户名密码组合", "@invalidUsernamePassword": {}, - "invoice": "Invoice", + "invoice": "发票", "@invoice": {}, - "invoiceNumber": "Invoice Number", + "invoiceNumber": "发票号码", "@invoiceNumber": {}, "issue": "下单任务", "@issue": {}, @@ -538,9 +538,9 @@ "@missingData": {}, "name": "名称", "@name": {}, - "no": "No", + "no": "否", "@no": {}, - "notApplicable": "N/A", + "notApplicable": "不适用", "@notApplicable": {}, "notConnected": "未连接", "@notConnected": {}, @@ -654,7 +654,7 @@ "@password": {}, "passwordEmpty": "密码不能为空", "@passwordEmpty": {}, - "pending": "Pending", + "pending": "等待", "@pending": {}, "permissionAccountDenied": "您的账户没有执行此操作所需的权限", "@permissionAccountDenied": {}, @@ -934,33 +934,33 @@ "@serverNotConnected": {}, "serverNotSelected": "未选定服务器", "@serverNotSelected": {}, - "shipment": "Shipment", + "shipment": "发货", "@shipment": {}, "shipments": "配送", "@shipments": {}, - "shipmentsPending": "Pending Shipments", + "shipmentsPending": "待处理货件", "@shipmentsPending": {}, "shipmentAdd": "添加配送", "@shipmentAdd": {}, - "shipmentCheck": "Check Shipment", + "shipmentCheck": "查询物流", "@shipmentCheck": {}, - "shipmentCheckDetail": "Mark this shipment as checked", + "shipmentCheckDetail": "标记为已核对", "@shipmentCheckDetail": {}, - "shipmentChecked": "Shipment Checked", + "shipmentChecked": "已核对", "@shipmentChecked": {}, - "shipmentDate": "Shipment Date", + "shipmentDate": "发货日期", "@shipmentDate": {}, - "shipmentEdit": "Edit Shipment", + "shipmentEdit": "编辑货件", "@shipmentEdit": {}, - "shipmentReference": "Shipment Reference", + "shipmentReference": "参考编号", "@shipmentReference": {}, - "shipmentSend": "Send Shipment", + "shipmentSend": "确认发货", "@shipmentSend": {}, - "shipmentUncheck": "Uncheck Shipment", + "shipmentUncheck": "取消核对", "@shipmentUncheck": {}, - "shipmentUncheckDetail": "Mark this shipment as unchecked", + "shipmentUncheckDetail": "标记为未核对", "@shipmentUncheckDetail": {}, - "shipmentUpdated": "Shipment Updated", + "shipmentUpdated": "货件信息已更新", "@shipmentUpdated": {}, "shipped": "已配送", "@shipped": {}, @@ -1106,7 +1106,7 @@ "@tokenMissingFromResponse": {}, "totalPrice": "总价", "@totalPrice": {}, - "trackingNumber": "Tracking Number", + "trackingNumber": "运单号", "@trackingNumber": {}, "transfer": "转移", "@transfer": { @@ -1168,7 +1168,7 @@ "@viewSupplierPart": {}, "website": "网站", "@website": {}, - "yes": "Yes", + "yes": "是", "@yes": {}, "price": "价格", "@price": {}, From 0fc80b1be3f45a0a4204a1e4bd7c8688fa1e7657 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 3 Nov 2025 21:39:39 +1100 Subject: [PATCH 14/40] Tweaks (#707) * Remove debug msg * Only request test templates for testable parts * Format --- lib/inventree/part.dart | 4 ++-- lib/widget/part/part_detail.dart | 12 +++++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/lib/inventree/part.dart b/lib/inventree/part.dart index c0050ece..23e306c1 100644 --- a/lib/inventree/part.dart +++ b/lib/inventree/part.dart @@ -278,8 +278,6 @@ class InvenTreePart extends InvenTreeModel { // Request pricing data for this part Future getPricing() async { - print("REQUEST PRICING FOR: ${pk}"); - try { final response = await InvenTreeAPI().get("/api/part/${pk}/pricing/"); if (response.isValid()) { @@ -411,6 +409,8 @@ class InvenTreePart extends InvenTreeModel { bool get isTrackable => getBool("trackable"); + bool get isTestable => getBool("testable"); + // Get the IPN (internal part number) for the Part instance String get IPN => getString("IPN"); diff --git a/lib/widget/part/part_detail.dart b/lib/widget/part/part_detail.dart index e6c7d6e6..4cbfa494 100644 --- a/lib/widget/part/part_detail.dart +++ b/lib/widget/part/part_detail.dart @@ -190,11 +190,13 @@ class _PartDisplayState extends RefreshableState { } // Request part test templates - part.getTestTemplates().then((value) { - if (mounted) { - setState(() {}); - } - }); + if (part.isTestable) { + part.getTestTemplates().then((value) { + if (mounted) { + setState(() {}); + } + }); + } // Request the number of attachments InvenTreePartAttachment().countAttachments(part.pk).then((int value) { From 490d008447b97eaa91e7884336474517e181ef40 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 3 Nov 2025 21:39:48 +1100 Subject: [PATCH 15/40] Fix URL for reporting an issue via GitHub (#706) * Fix URL for reporting an issue via GitHub * Format --- assets/release_notes.md | 6 ++++++ lib/settings/about.dart | 3 ++- pubspec.yaml | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/assets/release_notes.md b/assets/release_notes.md index 8f5daf99..421f14bb 100644 --- a/assets/release_notes.md +++ b/assets/release_notes.md @@ -1,3 +1,9 @@ +### 0.20.2 - November 2025 +--- + +- Fixes URL for reporting issues on GitHub + + ### 0.20.1 - October 2025 --- diff --git a/lib/settings/about.dart b/lib/settings/about.dart index bc8c3458..fa11eb3b 100644 --- a/lib/settings/about.dart +++ b/lib/settings/about.dart @@ -49,7 +49,8 @@ class InvenTreeAboutWidget extends StatelessWidget { var url = Uri( scheme: "https", host: "github.com", - path: "inventree/inventree-app/issues/new?title=Enter+bug+description", + path: "inventree/inventree-app/issues/new/", + queryParameters: {"title": "Enter bug description"}, ); if (await canLaunchUrl(url)) { diff --git a/pubspec.yaml b/pubspec.yaml index e4100bfb..a6c479e1 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: inventree description: InvenTree stock management -version: 0.20.1+104 +version: 0.20.2+105 environment: sdk: ^3.8.1 From 2252dd2fd6a26c907f2cf5df0b294da08fbb9fdd Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 3 Nov 2025 22:10:00 +1100 Subject: [PATCH 16/40] Thumbnail errors (#708) * Extract error info from thumbnail errors * Formatting --- lib/api.dart | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/api.dart b/lib/api.dart index 5d79a22a..7ea44aca 100644 --- a/lib/api.dart +++ b/lib/api.dart @@ -1545,8 +1545,15 @@ class InvenTreeAPI { return CachedNetworkImage( imageUrl: url, placeholder: (context, url) => CircularProgressIndicator(), - errorWidget: (context, url, error) => - Icon(TablerIcons.circle_x, color: COLOR_DANGER), + errorWidget: (context, url, error) { + print("CachedNetworkimage error: ${error.toString()}"); + return GestureDetector( + child: Icon(TablerIcons.circle_x, color: COLOR_DANGER), + onTap: () => { + showSnackIcon(error.toString().split(",")[0], success: false), + }, + ); + }, httpHeaders: defaultHeaders(), height: height, width: width, From ae1d8dd1886565974e9c5a5878fb9caf34a76d6d Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 4 Nov 2025 12:32:38 +1100 Subject: [PATCH 17/40] File upload fix (#712) * Allow file upload with non-strict https - Create custom client for uploads - Observe the USE_STRICT_HTTPS setting * Formatting * Update release notes * Fix await code --- assets/release_notes.md | 2 +- lib/api.dart | 28 ++++++++++++++++++++++------ 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/assets/release_notes.md b/assets/release_notes.md index 421f14bb..2e6b291a 100644 --- a/assets/release_notes.md +++ b/assets/release_notes.md @@ -2,7 +2,7 @@ --- - Fixes URL for reporting issues on GitHub - +- Fix for uploading files against server with self-signed certificates ### 0.20.1 - October 2025 --- diff --git a/lib/api.dart b/lib/api.dart index 7ea44aca..a2a48f9d 100644 --- a/lib/api.dart +++ b/lib/api.dart @@ -4,6 +4,7 @@ import "dart:io"; import "package:flutter/foundation.dart"; import "package:http/http.dart" as http; +import "package:http/io_client.dart"; import "package:intl/intl.dart"; import "package:inventree/main.dart"; import "package:one_context/one_context.dart"; @@ -983,12 +984,23 @@ class InvenTreeAPI { String method = "POST", Map? fields, }) async { - var _url = makeApiUrl(url); + bool strictHttps = await InvenTreeSettingsManager().getBool( + INV_STRICT_HTTPS, + false, + ); - var request = http.MultipartRequest(method, Uri.parse(_url)); + // Create an IOClient wrapper for sending the MultipartRequest + final ioClient = IOClient(createClient(url, strictHttps: strictHttps)); - request.headers.addAll(defaultHeaders()); + final uri = Uri.parse(makeApiUrl(url)); + final request = http.MultipartRequest(method, uri); + // Default headers + defaultHeaders().forEach((key, value) { + request.headers[key] = value; + }); + + // Optional fields if (fields != null) { fields.forEach((String key, dynamic value) { if (value == null) { @@ -999,20 +1011,24 @@ class InvenTreeAPI { }); } + // Add file to upload var _file = await http.MultipartFile.fromPath(name, f.path); - request.files.add(_file); + // Construct a response object to return APIResponse response = APIResponse(url: url, method: method); String jsondata = ""; try { - var httpResponse = await request.send().timeout(Duration(seconds: 120)); + var streamedResponse = await ioClient + .send(request) + .timeout(Duration(seconds: 120)); + final httpResponse = await http.Response.fromStream(streamedResponse); response.statusCode = httpResponse.statusCode; - jsondata = await httpResponse.stream.bytesToString(); + jsondata = httpResponse.body; response.data = json.decode(jsondata); From daf3bf829143718afe4102613d14e8220f0a739f Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 13 Nov 2025 23:01:24 +1100 Subject: [PATCH 18/40] Update python version for CI (#714) --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 2ecf506b..c3178766 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -33,7 +33,7 @@ jobs: - name: Install Python uses: actions/setup-python@v4 with: - python-version: 3.9 + python-version: 3.11 - name: Setup Java uses: actions/setup-java@v3 From 0eedf25d11c06d06d95dd258df0318669bdb67dd Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 13 Nov 2025 23:16:07 +1100 Subject: [PATCH 19/40] New Crowdin updates (#709) * New translations app_en.arb (Ukrainian) * New translations app_en.arb (Swedish) * New translations app_en.arb (Swedish) * New translations app_en.arb (Romanian) * New translations app_en.arb (Romanian) * New translations app_en.arb (Romanian) * New translations app_en.arb (Turkish) * New translations app_en.arb (German) --- lib/l10n/de_DE/app_de_DE.arb | 2 +- lib/l10n/ro_RO/app_ro_RO.arb | 188 +++++++++++++++++------------------ lib/l10n/sv_SE/app_sv_SE.arb | 10 +- lib/l10n/tr_TR/app_tr_TR.arb | 46 ++++----- lib/l10n/uk_UA/app_uk_UA.arb | 2 +- 5 files changed, 124 insertions(+), 124 deletions(-) diff --git a/lib/l10n/de_DE/app_de_DE.arb b/lib/l10n/de_DE/app_de_DE.arb index 172b055c..86a96172 100644 --- a/lib/l10n/de_DE/app_de_DE.arb +++ b/lib/l10n/de_DE/app_de_DE.arb @@ -1196,6 +1196,6 @@ "@pricingOverrides": {}, "currency": "Währung", "@currency": {}, - "priceBreaks": "Price Breaks", + "priceBreaks": "Preisstaffel", "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/ro_RO/app_ro_RO.arb b/lib/l10n/ro_RO/app_ro_RO.arb index 62167efb..2fc52401 100644 --- a/lib/l10n/ro_RO/app_ro_RO.arb +++ b/lib/l10n/ro_RO/app_ro_RO.arb @@ -42,11 +42,11 @@ "@aspectRatio3x2": {}, "aspectRatio4x3": "4:3", "@aspectRatio4x3": {}, - "aspectRatioSquare": "Square (1:1)", + "aspectRatioSquare": "Pătrat (1:1)", "@aspectRatioSquare": {}, "allocateStock": "Alocare Stoc", "@allocateStock": {}, - "allocatedStock": "Allocated Stock", + "allocatedStock": "Stocuri alocate", "@allocatedStock": {}, "appReleaseNotes": "Afișează notele de lansare a aplicației", "@appReleaseNotes": {}, @@ -170,7 +170,7 @@ "@categoryUpdated": {}, "company": "Companie", "@company": {}, - "companyAdd": "Add Company", + "companyAdd": "Adăugare companie", "@companyAdd": {}, "companyEdit": "Editare companie", "@companyEdit": {}, @@ -180,11 +180,11 @@ "@companyUpdated": {}, "companies": "Companii", "@companies": {}, - "complete": "Complete", + "complete": "Finalizare", "@complete": {}, - "completeOrder": "Complete Order", + "completeOrder": "Comandă completă", "@completeOrder": {}, - "completionDate": "Completion Date", + "completionDate": "Data completării", "@completionDate": {}, "configureServer": "Configurare setări server", "@configureServer": {}, @@ -204,9 +204,9 @@ }, "credits": "Credite", "@credits": {}, - "crop": "Crop", + "crop": "Decupați", "@crop": {}, - "cropImage": "Crop Image", + "cropImage": "Decupare imagine", "@cropImage": {}, "customer": "Client", "@customer": {}, @@ -228,11 +228,11 @@ "@delete": {}, "deleteFailed": "Operațiune de ștergere eșuată", "@deleteFailed": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", + "deleteImageConfirmation": "Sunteți sigur că doriți să ștergeți această imagine?", "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", + "deleteImageTooltip": "Șterge imaginea", "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", + "deleteImage": "Șterge imaginea", "@deleteImage": {}, "deletePart": "Șterge Piesa", "@deletePart": {}, @@ -240,7 +240,7 @@ "@deletePartDetail": {}, "deleteSuccess": "Operație de ștergere reușită", "@deleteSuccess": {}, - "deliveryDate": "Delivery Date", + "deliveryDate": "Data livrării", "@deliveryDate": {}, "description": "Descriere", "@description": {}, @@ -254,9 +254,9 @@ }, "documentation": "Documentație", "@documentation": {}, - "downloadComplete": "Download Complete", + "downloadComplete": "Descărcare completă", "@downloadComplete": {}, - "downloadError": "Error downloading image", + "downloadError": "Eroare la descărcarea imaginii", "@downloadError": {}, "downloading": "Se descarcă fișierul", "@downloading": {}, @@ -282,7 +282,7 @@ "@editItem": {}, "editLineItem": "Editare element rând", "@editLineItem": {}, - "email": "Email", + "email": "E-mail", "@email": {}, "enterPassword": "Introdu parola", "@enterPassword": {}, @@ -316,9 +316,9 @@ "@expiryExpired": {}, "expiryStale": "", "@expiryStale": {}, - "extraLineItem": "Extra Line Item", + "extraLineItem": "Elemente suplimentare", "@extraLineItem": {}, - "extraLineItems": "Extra Line Items", + "extraLineItems": "Elemente suplimentare", "@extraLineItems": {}, "feedback": "Feedback", "@feedback": {}, @@ -384,9 +384,9 @@ "@homeShowPo": {}, "homeShowPoDescription": "Afișați butonul de achiziții pe ecranul principal", "@homeShowPoDescription": {}, - "homeShowShipments": "Show Shipments", + "homeShowShipments": "Afișare livrări", "@homeShowShipments": {}, - "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "homeShowShipmentsDescription": "Arată transporturile în așteptare pe ecranul principal", "@homeShowShipmentsDescription": {}, "homeShowSo": "Arată Comenzile de Vânzări", "@homeShowSo": {}, @@ -454,9 +454,9 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Combinație de nume utilizator / parolă invalida", "@invalidUsernamePassword": {}, - "invoice": "Invoice", + "invoice": "Factură", "@invoice": {}, - "invoiceNumber": "Invoice Number", + "invoiceNumber": "Număr factură", "@invoiceNumber": {}, "issue": "Problemă", "@issue": {}, @@ -480,7 +480,7 @@ "@labelTemplate": {}, "labelSelectTemplate": "Selectați șablon de etichetă", "@labelSelectTemplate": {}, - "labelSelectPrinter": "Select Label Printer", + "labelSelectPrinter": "Selectați imprimanta de etichete", "@labelSelectPrinter": {}, "language": "Limba", "@language": {}, @@ -526,7 +526,7 @@ "@lost": {}, "manufacturerPart": "", "@manufacturerPart": {}, - "manufacturerPartEdit": "Edit Manufacturer Part", + "manufacturerPartEdit": "Editați piesa producătorului", "@manufacturerPartEdit": {}, "manufacturerPartNumber": "Număr Serie Producător", "@manufacturerPartNumber": {}, @@ -538,9 +538,9 @@ "@missingData": {}, "name": "Nume", "@name": {}, - "no": "No", + "no": "Nu", "@no": {}, - "notApplicable": "N/A", + "notApplicable": "Indisponibil", "@notApplicable": {}, "notConnected": "Neconectat", "@notConnected": {}, @@ -556,11 +556,11 @@ "@noResponse": {}, "noResults": "Niciun rezultat", "@noResults": {}, - "noImageAvailable": "No image available", + "noImageAvailable": "Nici o imagine disponibilă", "@noImageAvailable": {}, - "noPricingAvailable": "No pricing available", + "noPricingAvailable": "Nu există prețuri disponibile", "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", + "noPricingDataFound": "Nu au fost găsite date despre prețuri pentru această piesă", "@noPricingDataFound": {}, "noSubcategories": "Nu există subcategorii", "@noSubcategories": {}, @@ -624,9 +624,9 @@ "@partsNone": {}, "partNoResults": "Nicio piesă care se potrivește", "@partNoResults": {}, - "partPricing": "Part Pricing", + "partPricing": "Preț piesă", "@partPricing": {}, - "partPricingSettingDetail": "Display part pricing information", + "partPricingSettingDetail": "Afișați informații despre preț", "@pricingSettingDetail": {}, "partSettings": "Setări Piesa", "@partSettings": {}, @@ -654,13 +654,13 @@ "@password": {}, "passwordEmpty": "Câmpul pentru Parola nu poate fi gol", "@passwordEmpty": {}, - "pending": "Pending", + "pending": "În așteptare", "@pending": {}, "permissionAccountDenied": "Contul dvs. nu are permisiunile necesare pentru a efectua această acțiune", "@permissionAccountDenied": {}, "permissionRequired": "Permisiune necesară", "@permissionRequired": {}, - "phone": "Phone", + "phone": "Telefon", "@phone": {}, "printLabel": "Printati Eticheta", "@printLabel": {}, @@ -678,143 +678,143 @@ "@printLabelSuccess": {}, "profile": "Profiluri", "@profile": {}, - "profileAdd": "Add Server Profile", + "profileAdd": "Adaugă Profil Server", "@profileAdd": {}, - "profileConnect": "Connect to Server", + "profileConnect": "Conectare la server", "@profileConnect": {}, - "profileEdit": "Edit Server Profile", + "profileEdit": "Editează Profilul Serverului", "@profileEdit": {}, - "profileDelete": "Delete Server Profile", + "profileDelete": "Ștergere profil server", "@profileDelete": {}, - "profileLogout": "Logout Profile", + "profileLogout": "Deconectare profil", "@profileLogout": {}, - "profileName": "Profile Name", + "profileName": "Nume profil", "@profileName": {}, - "profileNone": "No profiles available", + "profileNone": "Nici un profil disponibil", "@profileNone": {}, - "profileNotSelected": "No Profile Selected", + "profileNotSelected": "Nici un profil selectat", "@profileNotSelected": {}, - "profileSelect": "Select InvenTree Server", + "profileSelect": "Selectați serverul InvenTree", "@profileSelect": {}, - "profileSelectOrCreate": "Select server or create a new profile", + "profileSelectOrCreate": "Selectează server sau creează un profil nou", "@profileSelectOrCreate": {}, - "profileTapToCreate": "Tap to create or select a profile", + "profileTapToCreate": "Atingeți pentru a crea sau a selecta un profil", "@profileTapToCreate": {}, - "projectCode": "Project Code", + "projectCode": "Cod proiect", "@projectCode": {}, - "purchaseOrderConfirmScan": "Confirm Scan Data", + "purchaseOrderConfirmScan": "Confirmați datele scanate", "@purchaseOrderConfirmScan": {}, - "purchaseOrderConfirmScanDetail": "Confirm details when scanning in items", + "purchaseOrderConfirmScanDetail": "Confirmați detaliile la scanarea articolelor", "@purchaseOrderConfirmScanDetail": {}, - "purchaseOrderEnable": "Enable Purchase Orders", + "purchaseOrderEnable": "Activați comenzile de achiziție", "@purchaseOrderEnable": {}, - "purchaseOrderEnableDetail": "Enable purchase order functionality", + "purchaseOrderEnableDetail": "Activează funcționalitatea comenzii de achiziție", "@purchaseOrderEnableDetail": {}, - "purchaseOrderShowCamera": "Camera Shortcut", + "purchaseOrderShowCamera": "Scurtătura Cameră", "@purchaseOrderShowCamera": {}, - "purchaseOrderShowCameraDetail": "Enable image upload shortcut on purchase order screen", + "purchaseOrderShowCameraDetail": "Activează comanda rapidă pentru încărcarea imaginilor pe ecranul comenzii de achiziție", "@purchaseOrderShowCameraDetail": {}, - "purchaseOrder": "Purchase Order", + "purchaseOrder": "Comandă de achiziție", "@purchaseOrder": {}, - "purchaseOrderCreate": "New Purchase Order", + "purchaseOrderCreate": "Comandă nouă de achiziție", "@purchaseOrderCreate": {}, - "purchaseOrderEdit": "Edit Purchase Order", + "purchaseOrderEdit": "Editați comanda de achiziție", "@purchaseOrderEdit": {}, - "purchaseOrderSettings": "Purchase order settings", + "purchaseOrderSettings": "Setări comandă de achiziție", "@purchaseOrderSettings": {}, - "purchaseOrders": "Purchase Orders", + "purchaseOrders": "Comandă de achiziție", "@purchaseOrders": {}, - "purchaseOrderUpdated": "Purchase order updated", + "purchaseOrderUpdated": "Comandă de achiziție actualizată", "@purchaseOrderUpdated": {}, - "purchasePrice": "Purchase Price", + "purchasePrice": "Preț achiziție", "@purchasePrice": {}, - "quantity": "Quantity", + "quantity": "Cantitate", "@quantity": { "description": "Quantity" }, - "quantityAvailable": "Quantity Available", + "quantityAvailable": "Cantitate disponibilă", "@quantityAvailable": {}, - "quantityEmpty": "Quantity is empty", + "quantityEmpty": "Cantitatea este goală", "@quantityEmpty": {}, - "quantityInvalid": "Quantity is invalid", + "quantityInvalid": "Cantitate invalida", "@quantityInvalid": {}, - "quantityPositive": "Quantity must be positive", + "quantityPositive": "Cantitatea trebuie să fie pozitivă", "@quantityPositive": {}, - "queryEmpty": "Enter search query", + "queryEmpty": "Introdu text căutat", "@queryEmpty": {}, - "queryNoResults": "No results for query", + "queryNoResults": "Nici un rezultat pentru cautare", "@queryNoResults": {}, - "received": "Received", + "received": "Recepţionat", "@received": {}, - "receivedFilterDetail": "Show received items", + "receivedFilterDetail": "Afișare articole primite", "@receivedFilterDetail": {}, - "receiveItem": "Receive Item", + "receiveItem": "Articole primite", "@receiveItem": {}, - "receivedItem": "Received Stock Item", + "receivedItem": "Articol primit în stoc", "@receivedItem": {}, - "reference": "Reference", + "reference": "Referinţă", "@reference": {}, - "refresh": "Refresh", + "refresh": "Actualizare", "@refresh": {}, - "rotateClockwise": "Rotate 90° clockwise", + "rotateClockwise": "Rotire la 90° în sens orar", "@rotateClockwise": {}, - "refreshing": "Refreshing", + "refreshing": "Actualizare", "@refreshing": {}, - "rejected": "Rejected", + "rejected": "Respins", "@rejected": {}, - "releaseNotes": "Release Notes", + "releaseNotes": "Informații & versiune", "@releaseNotes": {}, - "remove": "Remove", + "remove": "Șterge", "@remove": { "description": "remove" }, - "removeStock": "Remove Stock", + "removeStock": "Retragere stoc", "@removeStock": { "description": "remove stock" }, - "reportBug": "Report Bug", + "reportBug": "Raportează o eroare", "@reportBug": {}, - "reportBugDescription": "Submit bug report (requires GitHub account)", + "reportBugDescription": "Trimite raportul de eroare (necesită cont GitHub)", "@reportBugDescription": {}, "responsible": "Responsabil", "@responsible": {}, - "results": "Results", + "results": "Rezultate", "@results": {}, - "request": "Request", + "request": "Solicitare", "@request": {}, "requestFailed": "Cerere eșuată", "@requestFailed": {}, "requestSuccessful": "", "@requestSuccessful": {}, - "requestingData": "Requesting Data", + "requestingData": "Solicitare date", "@requestingData": {}, - "required": "Required", + "required": "Obligatoriu", "@required": { "description": "This field is required" }, - "response400": "Bad Request", + "response400": "Cerere greşită", "@response400": {}, - "response401": "Unauthorized", + "response401": "Neautorizat", "@response401": {}, - "response403": "Permission Denied", + "response403": "Acces interzis", "@response403": {}, - "response404": "Resource Not Found", + "response404": "Resursa nu a fost găsită", "@response404": {}, - "response405": "Method Not Allowed", + "response405": "Metoda nu este permisă", "@response405": {}, - "response429": "Too Many Requests", + "response429": "Prea multe solicitări", "@response429": {}, - "response500": "Internal Server Error", + "response500": "Eroare internă server", "@response500": {}, - "response501": "Not Implemented", + "response501": "Nu este implementat", "@response501": {}, - "response502": "Bad Gateway", + "response502": "Gateway greșit", "@response502": {}, - "response503": "Service Unavailable", + "response503": "Serviciu indisponibil", "@response503": {}, - "response504": "Gateway Timeout", + "response504": "Timeout gateway", "@response504": {}, - "response505": "HTTP Version Not Supported", + "response505": "Versiunea HTTP nu este suportată", "@response505": {}, "responseData": "Response data", "@responseData": {}, diff --git a/lib/l10n/sv_SE/app_sv_SE.arb b/lib/l10n/sv_SE/app_sv_SE.arb index 4e5a2c8b..72eee060 100644 --- a/lib/l10n/sv_SE/app_sv_SE.arb +++ b/lib/l10n/sv_SE/app_sv_SE.arb @@ -42,7 +42,7 @@ "@aspectRatio3x2": {}, "aspectRatio4x3": "4:3", "@aspectRatio4x3": {}, - "aspectRatioSquare": "Square (1:1)", + "aspectRatioSquare": "Kvadrat (1:1)", "@aspectRatioSquare": {}, "allocateStock": "Allokera lager", "@allocateStock": {}, @@ -454,7 +454,7 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Felaktigt användarnamn / lösenord kombination", "@invalidUsernamePassword": {}, - "invoice": "Invoice", + "invoice": "Faktura", "@invoice": {}, "invoiceNumber": "Fakturanummer", "@invoiceNumber": {}, @@ -660,7 +660,7 @@ "@permissionAccountDenied": {}, "permissionRequired": "Särskilda behörigheter krävs", "@permissionRequired": {}, - "phone": "Phone", + "phone": "Telefon", "@phone": {}, "printLabel": "Skriv ut etikett", "@printLabel": {}, @@ -1172,7 +1172,7 @@ "@yes": {}, "price": "Pris", "@price": {}, - "priceRange": "Price Range", + "priceRange": "Prisintervall", "@priceRange": {}, "priceOverrideMin": "Minimum Price Override", "@priceOverrideMin": {}, @@ -1194,7 +1194,7 @@ "@overallPricing": {}, "pricingOverrides": "Pricing Overrides", "@pricingOverrides": {}, - "currency": "Currency", + "currency": "Valuta", "@currency": {}, "priceBreaks": "Price Breaks", "@priceBreaks": {} diff --git a/lib/l10n/tr_TR/app_tr_TR.arb b/lib/l10n/tr_TR/app_tr_TR.arb index 8e240146..804aaae5 100644 --- a/lib/l10n/tr_TR/app_tr_TR.arb +++ b/lib/l10n/tr_TR/app_tr_TR.arb @@ -46,7 +46,7 @@ "@aspectRatioSquare": {}, "allocateStock": "Tahsisli stok", "@allocateStock": {}, - "allocatedStock": "Allocated Stock", + "allocatedStock": "Tahsis Edilen Stok", "@allocatedStock": {}, "appReleaseNotes": "Uygulama yayınlama notlarını göster", "@appReleaseNotes": {}, @@ -240,7 +240,7 @@ "@deletePartDetail": {}, "deleteSuccess": "Silme işlemi başarılı", "@deleteSuccess": {}, - "deliveryDate": "Delivery Date", + "deliveryDate": "Teslim Tarihi", "@deliveryDate": {}, "description": "Açıklama", "@description": {}, @@ -384,9 +384,9 @@ "@homeShowPo": {}, "homeShowPoDescription": "Satınalma sipariş butonunu ana ekranda göster", "@homeShowPoDescription": {}, - "homeShowShipments": "Show Shipments", + "homeShowShipments": "Teslimatları Göster", "@homeShowShipments": {}, - "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "homeShowShipmentsDescription": "Bekleyen teslimatları ana ekranda göster", "@homeShowShipmentsDescription": {}, "homeShowSo": "Satış Siparişlerini Göster", "@homeShowSo": {}, @@ -454,9 +454,9 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Geçersiz kullanıcı adı ve şifre", "@invalidUsernamePassword": {}, - "invoice": "Invoice", + "invoice": "Fatura", "@invoice": {}, - "invoiceNumber": "Invoice Number", + "invoiceNumber": "Fatura Numarası", "@invoiceNumber": {}, "issue": "Sorun", "@issue": {}, @@ -538,9 +538,9 @@ "@missingData": {}, "name": "Adı", "@name": {}, - "no": "No", + "no": "Hayır", "@no": {}, - "notApplicable": "N/A", + "notApplicable": "Yok / Geçerli Değil", "@notApplicable": {}, "notConnected": "Bağlı değil", "@notConnected": {}, @@ -654,7 +654,7 @@ "@password": {}, "passwordEmpty": "Parola boş bırakılamaz", "@passwordEmpty": {}, - "pending": "Pending", + "pending": "Beklemede", "@pending": {}, "permissionAccountDenied": "Bu eylemi gerçekleştirmek için gerekli yetkiye sahip değilsiniz", "@permissionAccountDenied": {}, @@ -934,33 +934,33 @@ "@serverNotConnected": {}, "serverNotSelected": "Sunucu bulunamadı", "@serverNotSelected": {}, - "shipment": "Shipment", + "shipment": "Teslimat", "@shipment": {}, "shipments": "Gönderiler", "@shipments": {}, - "shipmentsPending": "Pending Shipments", + "shipmentsPending": "Bekleyen Teslimatlar", "@shipmentsPending": {}, "shipmentAdd": "Gönderi Ekle", "@shipmentAdd": {}, - "shipmentCheck": "Check Shipment", + "shipmentCheck": "Teslimatı Kontrol Et", "@shipmentCheck": {}, - "shipmentCheckDetail": "Mark this shipment as checked", + "shipmentCheckDetail": "Bu teslimatı kontrol edildi olarak işaretle", "@shipmentCheckDetail": {}, - "shipmentChecked": "Shipment Checked", + "shipmentChecked": "Teslimat Kontrol Edildi", "@shipmentChecked": {}, - "shipmentDate": "Shipment Date", + "shipmentDate": "Teslimat Tarihi", "@shipmentDate": {}, - "shipmentEdit": "Edit Shipment", + "shipmentEdit": "Teslimatı Düzenle", "@shipmentEdit": {}, - "shipmentReference": "Shipment Reference", + "shipmentReference": "Teslimat Referansı", "@shipmentReference": {}, - "shipmentSend": "Send Shipment", + "shipmentSend": "Teslimatı Gönder", "@shipmentSend": {}, - "shipmentUncheck": "Uncheck Shipment", + "shipmentUncheck": "Teslimat İşaretini Kaldır", "@shipmentUncheck": {}, - "shipmentUncheckDetail": "Mark this shipment as unchecked", + "shipmentUncheckDetail": "Bu teslimatı kontrol edilmedi olarak işaretle", "@shipmentUncheckDetail": {}, - "shipmentUpdated": "Shipment Updated", + "shipmentUpdated": "Teslimat Güncellendi", "@shipmentUpdated": {}, "shipped": "Gönderildi", "@shipped": {}, @@ -1106,7 +1106,7 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Toplam Fiyat", "@totalPrice": {}, - "trackingNumber": "Tracking Number", + "trackingNumber": "Takip Numarası", "@trackingNumber": {}, "transfer": "Aktarım", "@transfer": { @@ -1168,7 +1168,7 @@ "@viewSupplierPart": {}, "website": "Web sitesi", "@website": {}, - "yes": "Yes", + "yes": "Evet", "@yes": {}, "price": "Fiyat", "@price": {}, diff --git a/lib/l10n/uk_UA/app_uk_UA.arb b/lib/l10n/uk_UA/app_uk_UA.arb index 6947b489..c10396c1 100644 --- a/lib/l10n/uk_UA/app_uk_UA.arb +++ b/lib/l10n/uk_UA/app_uk_UA.arb @@ -856,7 +856,7 @@ "@scanBarcode": {}, "scanSupplierPart": "Сканувати штрих-код позиції постачальника", "@scanSupplierPart": {}, - "scanIntoLocation": "Scan Into Location", + "scanIntoLocation": "", "@scanIntoLocation": {}, "scanIntoLocationDetail": "Scan this item into location", "@scanIntoLocationDetail": {}, From ed7d73b9c0b682ed2047b503e540a3542d4b01df Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 13 Nov 2025 23:37:05 +1100 Subject: [PATCH 20/40] Default location (#715) * Fix async loading of parent part - Don't block render while fetching data * Display default location on part detail page * Use pathstring instead of name * Update release notes * Display in stock detail too * dart format --- assets/release_notes.md | 5 +++ lib/l10n/app_en.arb | 4 ++- lib/widget/part/part_detail.dart | 53 +++++++++++++++++++++++++----- lib/widget/stock/stock_detail.dart | 35 +++++++++++++++++++- pubspec.yaml | 2 +- 5 files changed, 87 insertions(+), 12 deletions(-) diff --git a/assets/release_notes.md b/assets/release_notes.md index 2e6b291a..b1c2f958 100644 --- a/assets/release_notes.md +++ b/assets/release_notes.md @@ -1,3 +1,8 @@ +### 0.21.0 - November 2025 +--- + +- Display default stock location in part detail page + ### 0.20.2 - November 2025 --- diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 83fef3af..b57df1f1 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -719,7 +719,6 @@ "languageSelect": "Select Language", "@languageSelect": {}, - "lastStocktake": "Last Stocktake", "@lastStocktake": {}, @@ -753,6 +752,9 @@ "locationCreateDetail": "Create new stock location", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, + "locationNotSet": "No location specified", "@locationNotSet": {}, diff --git a/lib/widget/part/part_detail.dart b/lib/widget/part/part_detail.dart index 4cbfa494..e54bb753 100644 --- a/lib/widget/part/part_detail.dart +++ b/lib/widget/part/part_detail.dart @@ -47,6 +47,8 @@ class _PartDisplayState extends RefreshableState { InvenTreePart? parentPart; + InvenTreeStockLocation? defaultLocation; + int parameterCount = 0; bool allowLabelPrinting = false; @@ -177,16 +179,35 @@ class _PartDisplayState extends RefreshableState { // If the part points to a parent "template" part, request that too int? templatePartId = part.variantOf; - if (templatePartId == null) { - parentPart = null; - } else { - final result = await InvenTreePart().get(templatePartId); - - if (result != null && result is InvenTreePart) { - parentPart = result; - } else { + if (templatePartId != null) { + InvenTreePart().get(templatePartId).then((value) { + if (mounted) { + setState(() { + parentPart = value as InvenTreePart?; + }); + } + }); + } else if (mounted) { + setState(() { parentPart = null; - } + }); + } + + // Is there a default location specified for this part? + int? defaultLocationId = part.defaultLocation; + + if (defaultLocationId != null) { + InvenTreeStockLocation().get(defaultLocationId).then((value) { + if (mounted) { + setState(() { + defaultLocation = value as InvenTreeStockLocation?; + }); + } + }); + } else if (mounted) { + setState(() { + defaultLocation = null; + }); } // Request part test templates @@ -414,6 +435,20 @@ class _PartDisplayState extends RefreshableState { ), ); + if (defaultLocation != null) { + tiles.add( + ListTile( + title: Text(L10().locationDefault), + subtitle: Text(defaultLocation!.pathstring), + leading: Icon(TablerIcons.map_pin), + trailing: LinkIcon(), + onTap: () { + defaultLocation?.goToDetailPage(context); + }, + ), + ); + } + if (showPricing && partPricing != null) { String pricing = formatPriceRange( partPricing?.overallMin, diff --git a/lib/widget/stock/stock_detail.dart b/lib/widget/stock/stock_detail.dart index 19f1592e..648610c0 100644 --- a/lib/widget/stock/stock_detail.dart +++ b/lib/widget/stock/stock_detail.dart @@ -49,6 +49,7 @@ class _StockItemDisplayState extends RefreshableState { // Linked data fields InvenTreePart? part; + InvenTreeStockLocation? defaultLocation; InvenTreeSalesOrder? salesOrder; InvenTreeCompany? customer; @@ -234,6 +235,23 @@ class _StockItemDisplayState extends RefreshableState { stockShowTests &= part?.isTrackable ?? false; + // Request default location + int? defaultLocationId = part?.defaultLocation; + + if (defaultLocationId != null) { + InvenTreeStockLocation().get(defaultLocationId).then((value) { + if (mounted) { + setState(() { + defaultLocation = value as InvenTreeStockLocation?; + }); + } + }); + } else if (mounted) { + setState(() { + defaultLocation = null; + }); + } + // Request test results (async) if (stockShowTests) { widget.item.getTestResults().then((value) { @@ -569,6 +587,21 @@ class _StockItemDisplayState extends RefreshableState { ); } + if (defaultLocation != null && + defaultLocation?.pk != widget.item.locationId) { + tiles.add( + ListTile( + title: Text(L10().locationDefault), + subtitle: Text(defaultLocation!.pathstring), + leading: Icon(TablerIcons.map_pin), + trailing: LinkIcon(), + onTap: () { + defaultLocation?.goToDetailPage(context); + }, + ), + ); + } + // Quantity information if (widget.item.isSerialized()) { tiles.add( @@ -744,7 +777,7 @@ class _StockItemDisplayState extends RefreshableState { tiles.add( ListTile( title: Text(L10().lastStocktake), - subtitle: Text(widget.item.stocktakeDateString), + trailing: LargeText(widget.item.stocktakeDateString), leading: Icon(TablerIcons.calendar), ), ); diff --git a/pubspec.yaml b/pubspec.yaml index a6c479e1..a4450354 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: inventree description: InvenTree stock management -version: 0.20.2+105 +version: 0.21.0+106 environment: sdk: ^3.8.1 From 6707f89019db8bf2168bef75538208f560662d91 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 13 Nov 2025 23:54:03 +1100 Subject: [PATCH 21/40] Display supplier part stock (#717) * Display supplier part stock * dart format * Update release notes --- assets/release_notes.md | 3 ++- lib/inventree/company.dart | 4 +++ lib/widget/company/supplier_part_detail.dart | 26 +++++++++++++++++++- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/assets/release_notes.md b/assets/release_notes.md index b1c2f958..413d34ae 100644 --- a/assets/release_notes.md +++ b/assets/release_notes.md @@ -1,7 +1,8 @@ ### 0.21.0 - November 2025 --- -- Display default stock location in part detail page +- Display default stock location in Part detail page +- Display stock information in SupplierPart detail page ### 0.20.2 - November 2025 --- diff --git a/lib/inventree/company.dart b/lib/inventree/company.dart index f9f6b426..a2a3f21d 100644 --- a/lib/inventree/company.dart +++ b/lib/inventree/company.dart @@ -225,6 +225,10 @@ class InvenTreeSupplierPart extends InvenTreeModel { int get partId => getInt("part"); + double get inStock => getDouble("in_stock"); + + double get onOrder => getDouble("on_order"); + String get partImage => (jsondata["part_detail"]?["thumbnail"] ?? InvenTreeAPI.staticThumb) as String; diff --git a/lib/widget/company/supplier_part_detail.dart b/lib/widget/company/supplier_part_detail.dart index b2a965fc..77e29ab4 100644 --- a/lib/widget/company/supplier_part_detail.dart +++ b/lib/widget/company/supplier_part_detail.dart @@ -1,6 +1,7 @@ import "package:flutter/material.dart"; import "package:flutter_speed_dial/flutter_speed_dial.dart"; import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; +import "package:inventree/helpers.dart"; import "package:inventree/widget/link_icon.dart"; import "package:inventree/app_colors.dart"; @@ -15,6 +16,7 @@ import "package:inventree/widget/progress.dart"; import "package:inventree/widget/refreshable_state.dart"; import "package:inventree/widget/snacks.dart"; import "package:inventree/widget/company/manufacturer_part_detail.dart"; +import "package:inventree/widget/stock/stock_list.dart"; /* * Detail widget for viewing a single SupplierPart instance @@ -142,6 +144,28 @@ class _SupplierPartDisplayState ); } + // Stock levels associated with this SupplierPart + tiles.add( + ListTile( + title: Text(L10().availableStock), + leading: Icon(TablerIcons.packages), + trailing: LinkIcon( + text: simpleNumberString(widget.supplierPart.inStock), + ), + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => StockItemList({ + "in_stock": "true", + "supplier_part": widget.supplierPart.pkString, + }), + ), + ); + }, + ), + ); + // Supplier details tiles.add( ListTile( @@ -196,7 +220,7 @@ class _SupplierPartDisplayState tiles.add( ListTile( - title: Text(L10().manufacturerPartNumber), + title: Text(L10().manufacturerPart), subtitle: Text(widget.supplierPart.MPN), leading: Icon(TablerIcons.hash, color: COLOR_ACTION), trailing: LinkIcon(), From 8a4750d298c4e2e0012bc6d33b54d012b78a5e34 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 15 Nov 2025 08:03:12 +1100 Subject: [PATCH 22/40] New Crowdin updates (#719) * New translations app_en.arb (Romanian) * New translations app_en.arb (French) * New translations app_en.arb (Spanish) * New translations app_en.arb (Arabic) * New translations app_en.arb (Bulgarian) * New translations app_en.arb (Czech) * New translations app_en.arb (Danish) * New translations app_en.arb (German) * New translations app_en.arb (Greek) * New translations app_en.arb (Finnish) * New translations app_en.arb (Hebrew) * New translations app_en.arb (Hungarian) * New translations app_en.arb (Italian) * New translations app_en.arb (Japanese) * New translations app_en.arb (Korean) * New translations app_en.arb (Lithuanian) * New translations app_en.arb (Dutch) * New translations app_en.arb (Norwegian) * New translations app_en.arb (Polish) * New translations app_en.arb (Portuguese) * New translations app_en.arb (Russian) * New translations app_en.arb (Slovak) * New translations app_en.arb (Slovenian) * New translations app_en.arb (Swedish) * New translations app_en.arb (Turkish) * New translations app_en.arb (Chinese Simplified) * New translations app_en.arb (Chinese Traditional) * New translations app_en.arb (Vietnamese) * New translations app_en.arb (Portuguese, Brazilian) * New translations app_en.arb (Indonesian) * New translations app_en.arb (Persian) * New translations app_en.arb (Spanish, Mexico) * New translations app_en.arb (Thai) * New translations app_en.arb (Estonian) * New translations app_en.arb (Latvian) * New translations app_en.arb (Hindi) * New translations app_en.arb (Serbian (Latin)) --- lib/l10n/ar_SA/app_ar_SA.arb | 2 ++ lib/l10n/bg_BG/app_bg_BG.arb | 2 ++ lib/l10n/cs_CZ/app_cs_CZ.arb | 2 ++ lib/l10n/da_DK/app_da_DK.arb | 2 ++ lib/l10n/de_DE/app_de_DE.arb | 6 ++++-- lib/l10n/el_GR/app_el_GR.arb | 2 ++ lib/l10n/es_ES/app_es_ES.arb | 2 ++ lib/l10n/es_MX/app_es_MX.arb | 2 ++ lib/l10n/et_EE/app_et_EE.arb | 2 ++ lib/l10n/fa_IR/app_fa_IR.arb | 2 ++ lib/l10n/fi_FI/app_fi_FI.arb | 2 ++ lib/l10n/fr_FR/app_fr_FR.arb | 2 ++ lib/l10n/he_IL/app_he_IL.arb | 2 ++ lib/l10n/hi_IN/app_hi_IN.arb | 2 ++ lib/l10n/hu_HU/app_hu_HU.arb | 2 ++ lib/l10n/id_ID/app_id_ID.arb | 2 ++ lib/l10n/it_IT/app_it_IT.arb | 2 ++ lib/l10n/ja_JP/app_ja_JP.arb | 2 ++ lib/l10n/ko_KR/app_ko_KR.arb | 2 ++ lib/l10n/lt_LT/app_lt_LT.arb | 2 ++ lib/l10n/lv_LV/app_lv_LV.arb | 2 ++ lib/l10n/nl_NL/app_nl_NL.arb | 2 ++ lib/l10n/no_NO/app_no_NO.arb | 2 ++ lib/l10n/pl_PL/app_pl_PL.arb | 2 ++ lib/l10n/pt_BR/app_pt_BR.arb | 2 ++ lib/l10n/pt_PT/app_pt_PT.arb | 2 ++ lib/l10n/ro_RO/app_ro_RO.arb | 2 ++ lib/l10n/ru_RU/app_ru_RU.arb | 2 ++ lib/l10n/sk_SK/app_sk_SK.arb | 2 ++ lib/l10n/sl_SI/app_sl_SI.arb | 2 ++ lib/l10n/sr_CS/app_sr_CS.arb | 2 ++ lib/l10n/sv_SE/app_sv_SE.arb | 2 ++ lib/l10n/th_TH/app_th_TH.arb | 2 ++ lib/l10n/tr_TR/app_tr_TR.arb | 2 ++ lib/l10n/vi_VN/app_vi_VN.arb | 2 ++ lib/l10n/zh_CN/app_zh_CN.arb | 2 ++ lib/l10n/zh_TW/app_zh_TW.arb | 2 ++ 37 files changed, 76 insertions(+), 2 deletions(-) diff --git a/lib/l10n/ar_SA/app_ar_SA.arb b/lib/l10n/ar_SA/app_ar_SA.arb index c91a4af4..f865457b 100644 --- a/lib/l10n/ar_SA/app_ar_SA.arb +++ b/lib/l10n/ar_SA/app_ar_SA.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Create new stock location", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "No location specified", "@locationNotSet": {}, "locationUpdated": "Stock location updated", diff --git a/lib/l10n/bg_BG/app_bg_BG.arb b/lib/l10n/bg_BG/app_bg_BG.arb index aaa8f5c3..57bd141d 100644 --- a/lib/l10n/bg_BG/app_bg_BG.arb +++ b/lib/l10n/bg_BG/app_bg_BG.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Create new stock location", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "No location specified", "@locationNotSet": {}, "locationUpdated": "Stock location updated", diff --git a/lib/l10n/cs_CZ/app_cs_CZ.arb b/lib/l10n/cs_CZ/app_cs_CZ.arb index 6d055821..28550226 100644 --- a/lib/l10n/cs_CZ/app_cs_CZ.arb +++ b/lib/l10n/cs_CZ/app_cs_CZ.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Vytvořit nové skladové místo", "@locationCreateDetail": {}, + "locationDefault": "Výchozí umístění", + "@locationDefault": {}, "locationNotSet": "Není zadáno žádné umístění", "@locationNotSet": {}, "locationUpdated": "Skladové místo bylo aktualizováno", diff --git a/lib/l10n/da_DK/app_da_DK.arb b/lib/l10n/da_DK/app_da_DK.arb index 7683b84d..41f578c4 100644 --- a/lib/l10n/da_DK/app_da_DK.arb +++ b/lib/l10n/da_DK/app_da_DK.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Create new stock location", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "No location specified", "@locationNotSet": {}, "locationUpdated": "Stock location updated", diff --git a/lib/l10n/de_DE/app_de_DE.arb b/lib/l10n/de_DE/app_de_DE.arb index 86a96172..a6725bd4 100644 --- a/lib/l10n/de_DE/app_de_DE.arb +++ b/lib/l10n/de_DE/app_de_DE.arb @@ -46,7 +46,7 @@ "@aspectRatioSquare": {}, "allocateStock": "Bestand zuweisen", "@allocateStock": {}, - "allocatedStock": "Allocated Stock", + "allocatedStock": "Zugewiesener Bestand", "@allocatedStock": {}, "appReleaseNotes": "App-Versionshinweise anzeigen", "@appReleaseNotes": {}, @@ -182,7 +182,7 @@ "@companies": {}, "complete": "", "@complete": {}, - "completeOrder": "Complete Order", + "completeOrder": "Bestellung abschließen", "@completeOrder": {}, "completionDate": "Abgeschlossen am", "@completionDate": {}, @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Neuen Lagerort erstellen", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "Lagerort nicht angegeben", "@locationNotSet": {}, "locationUpdated": "Lagerort aktualisiert", diff --git a/lib/l10n/el_GR/app_el_GR.arb b/lib/l10n/el_GR/app_el_GR.arb index a3a252b3..243b8e5f 100644 --- a/lib/l10n/el_GR/app_el_GR.arb +++ b/lib/l10n/el_GR/app_el_GR.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Create new stock location", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "No location specified", "@locationNotSet": {}, "locationUpdated": "Stock location updated", diff --git a/lib/l10n/es_ES/app_es_ES.arb b/lib/l10n/es_ES/app_es_ES.arb index 28a808d9..98f8eb62 100644 --- a/lib/l10n/es_ES/app_es_ES.arb +++ b/lib/l10n/es_ES/app_es_ES.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Crear nueva ubicación de stock", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "No se especificó ninguna ubicación", "@locationNotSet": {}, "locationUpdated": "Ubicación de stock actualizada", diff --git a/lib/l10n/es_MX/app_es_MX.arb b/lib/l10n/es_MX/app_es_MX.arb index f70e9d05..87e27b3c 100644 --- a/lib/l10n/es_MX/app_es_MX.arb +++ b/lib/l10n/es_MX/app_es_MX.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Crear nueva ubicación de inventario", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "No se especificó ninguna ubicación", "@locationNotSet": {}, "locationUpdated": "Ubicación de inventario actualizada", diff --git a/lib/l10n/et_EE/app_et_EE.arb b/lib/l10n/et_EE/app_et_EE.arb index 2bd5e323..b8876716 100644 --- a/lib/l10n/et_EE/app_et_EE.arb +++ b/lib/l10n/et_EE/app_et_EE.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Create new stock location", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "No location specified", "@locationNotSet": {}, "locationUpdated": "Stock location updated", diff --git a/lib/l10n/fa_IR/app_fa_IR.arb b/lib/l10n/fa_IR/app_fa_IR.arb index 131d5519..2dc9b6cd 100644 --- a/lib/l10n/fa_IR/app_fa_IR.arb +++ b/lib/l10n/fa_IR/app_fa_IR.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "مکان سهام جدید ایجاد کنید", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "هیچ مکانی مشخص نشده است", "@locationNotSet": {}, "locationUpdated": "مکان سهام به روز شد", diff --git a/lib/l10n/fi_FI/app_fi_FI.arb b/lib/l10n/fi_FI/app_fi_FI.arb index 3126d75f..b1250423 100644 --- a/lib/l10n/fi_FI/app_fi_FI.arb +++ b/lib/l10n/fi_FI/app_fi_FI.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Create new stock location", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "Sijaintia ei ole määritetty", "@locationNotSet": {}, "locationUpdated": "Stock location updated", diff --git a/lib/l10n/fr_FR/app_fr_FR.arb b/lib/l10n/fr_FR/app_fr_FR.arb index f5f55ac6..9762e8a0 100644 --- a/lib/l10n/fr_FR/app_fr_FR.arb +++ b/lib/l10n/fr_FR/app_fr_FR.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Créer un nouvel emplacement de stock", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "Aucun emplacement spécifié", "@locationNotSet": {}, "locationUpdated": "Emplacement du stock mis à jour", diff --git a/lib/l10n/he_IL/app_he_IL.arb b/lib/l10n/he_IL/app_he_IL.arb index 20994060..ef1c0b9d 100644 --- a/lib/l10n/he_IL/app_he_IL.arb +++ b/lib/l10n/he_IL/app_he_IL.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "צור מיקום מלאי חדש", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "לא צוין מיקום", "@locationNotSet": {}, "locationUpdated": "מיקום המלאי עודכן", diff --git a/lib/l10n/hi_IN/app_hi_IN.arb b/lib/l10n/hi_IN/app_hi_IN.arb index 1bf6e29a..9bdf06b1 100644 --- a/lib/l10n/hi_IN/app_hi_IN.arb +++ b/lib/l10n/hi_IN/app_hi_IN.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Create new stock location", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "No location specified", "@locationNotSet": {}, "locationUpdated": "Stock location updated", diff --git a/lib/l10n/hu_HU/app_hu_HU.arb b/lib/l10n/hu_HU/app_hu_HU.arb index b3ba87d5..1837a91d 100644 --- a/lib/l10n/hu_HU/app_hu_HU.arb +++ b/lib/l10n/hu_HU/app_hu_HU.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Új készlet hely létrehozása", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "Nincs megadva hely", "@locationNotSet": {}, "locationUpdated": "Készlet hely adatai frissítve", diff --git a/lib/l10n/id_ID/app_id_ID.arb b/lib/l10n/id_ID/app_id_ID.arb index 9d2ae4b2..205c20ea 100644 --- a/lib/l10n/id_ID/app_id_ID.arb +++ b/lib/l10n/id_ID/app_id_ID.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Create new stock location", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "No location specified", "@locationNotSet": {}, "locationUpdated": "Stock location updated", diff --git a/lib/l10n/it_IT/app_it_IT.arb b/lib/l10n/it_IT/app_it_IT.arb index af8f2257..d50a788c 100644 --- a/lib/l10n/it_IT/app_it_IT.arb +++ b/lib/l10n/it_IT/app_it_IT.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Crea nuova ubicazione di magazzino", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "Nessuna ubicazione specificata", "@locationNotSet": {}, "locationUpdated": "Ubicazione di magazzino aggiornata", diff --git a/lib/l10n/ja_JP/app_ja_JP.arb b/lib/l10n/ja_JP/app_ja_JP.arb index 170c5128..0489fcf0 100644 --- a/lib/l10n/ja_JP/app_ja_JP.arb +++ b/lib/l10n/ja_JP/app_ja_JP.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "新しい在庫場所を作成", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "在庫場所が指定されていません", "@locationNotSet": {}, "locationUpdated": "在庫場所を更新しました", diff --git a/lib/l10n/ko_KR/app_ko_KR.arb b/lib/l10n/ko_KR/app_ko_KR.arb index 6241ddb1..ba576bf6 100644 --- a/lib/l10n/ko_KR/app_ko_KR.arb +++ b/lib/l10n/ko_KR/app_ko_KR.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Create new stock location", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "No location specified", "@locationNotSet": {}, "locationUpdated": "Stock location updated", diff --git a/lib/l10n/lt_LT/app_lt_LT.arb b/lib/l10n/lt_LT/app_lt_LT.arb index 6e5ff34c..abb7b83c 100644 --- a/lib/l10n/lt_LT/app_lt_LT.arb +++ b/lib/l10n/lt_LT/app_lt_LT.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Create new stock location", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "No location specified", "@locationNotSet": {}, "locationUpdated": "Stock location updated", diff --git a/lib/l10n/lv_LV/app_lv_LV.arb b/lib/l10n/lv_LV/app_lv_LV.arb index 7dbe58f5..acb13d52 100644 --- a/lib/l10n/lv_LV/app_lv_LV.arb +++ b/lib/l10n/lv_LV/app_lv_LV.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Create new stock location", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "No location specified", "@locationNotSet": {}, "locationUpdated": "Stock location updated", diff --git a/lib/l10n/nl_NL/app_nl_NL.arb b/lib/l10n/nl_NL/app_nl_NL.arb index 4e574ec0..83d40f07 100644 --- a/lib/l10n/nl_NL/app_nl_NL.arb +++ b/lib/l10n/nl_NL/app_nl_NL.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Creëer nieuwe voorraadlocatie", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "Geen locatie opgegeven", "@locationNotSet": {}, "locationUpdated": "Voorraadlocatie bijgewerkt", diff --git a/lib/l10n/no_NO/app_no_NO.arb b/lib/l10n/no_NO/app_no_NO.arb index 408c72bc..3c6ee3dd 100644 --- a/lib/l10n/no_NO/app_no_NO.arb +++ b/lib/l10n/no_NO/app_no_NO.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Opprett ny lagerplassering", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "Ingen plassering spesifisert", "@locationNotSet": {}, "locationUpdated": "Lagerplassering oppdatert", diff --git a/lib/l10n/pl_PL/app_pl_PL.arb b/lib/l10n/pl_PL/app_pl_PL.arb index 8b8ac2a2..2743161c 100644 --- a/lib/l10n/pl_PL/app_pl_PL.arb +++ b/lib/l10n/pl_PL/app_pl_PL.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Utwórz nową pozycję magazynową", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "Nie określono lokacji", "@locationNotSet": {}, "locationUpdated": "Lokalizacja stanu magazynowego została zaktualizowana", diff --git a/lib/l10n/pt_BR/app_pt_BR.arb b/lib/l10n/pt_BR/app_pt_BR.arb index 7e715d69..43a7cfbb 100644 --- a/lib/l10n/pt_BR/app_pt_BR.arb +++ b/lib/l10n/pt_BR/app_pt_BR.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Criar nova localizacao no estoque", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "Nenhuma localizacao especificada", "@locationNotSet": {}, "locationUpdated": "Localizacao no estoque atualizada", diff --git a/lib/l10n/pt_PT/app_pt_PT.arb b/lib/l10n/pt_PT/app_pt_PT.arb index de33d15c..c0b8366e 100644 --- a/lib/l10n/pt_PT/app_pt_PT.arb +++ b/lib/l10n/pt_PT/app_pt_PT.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Create new stock location", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "No location specified", "@locationNotSet": {}, "locationUpdated": "Stock location updated", diff --git a/lib/l10n/ro_RO/app_ro_RO.arb b/lib/l10n/ro_RO/app_ro_RO.arb index 2fc52401..67150c02 100644 --- a/lib/l10n/ro_RO/app_ro_RO.arb +++ b/lib/l10n/ro_RO/app_ro_RO.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Creează o nouă locație de stoc", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "Nici o locaţie specificată", "@locationNotSet": {}, "locationUpdated": "Locație stoc actualizată", diff --git a/lib/l10n/ru_RU/app_ru_RU.arb b/lib/l10n/ru_RU/app_ru_RU.arb index 800335e6..3d31ce2e 100644 --- a/lib/l10n/ru_RU/app_ru_RU.arb +++ b/lib/l10n/ru_RU/app_ru_RU.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Создать новое расположение склада", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "Не указано месторасположение", "@locationNotSet": {}, "locationUpdated": "Расположение склада обновлено", diff --git a/lib/l10n/sk_SK/app_sk_SK.arb b/lib/l10n/sk_SK/app_sk_SK.arb index a7d26a48..e0eabe3f 100644 --- a/lib/l10n/sk_SK/app_sk_SK.arb +++ b/lib/l10n/sk_SK/app_sk_SK.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Create new stock location", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "No location specified", "@locationNotSet": {}, "locationUpdated": "Stock location updated", diff --git a/lib/l10n/sl_SI/app_sl_SI.arb b/lib/l10n/sl_SI/app_sl_SI.arb index 3ca87300..746c8459 100644 --- a/lib/l10n/sl_SI/app_sl_SI.arb +++ b/lib/l10n/sl_SI/app_sl_SI.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Create new stock location", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "No location specified", "@locationNotSet": {}, "locationUpdated": "Stock location updated", diff --git a/lib/l10n/sr_CS/app_sr_CS.arb b/lib/l10n/sr_CS/app_sr_CS.arb index c3e9f4b0..0e2d4009 100644 --- a/lib/l10n/sr_CS/app_sr_CS.arb +++ b/lib/l10n/sr_CS/app_sr_CS.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Kreiraj novu lokaciju zaliha", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "Nema određene lokacije", "@locationNotSet": {}, "locationUpdated": "Ažurirana lokacija zaliha", diff --git a/lib/l10n/sv_SE/app_sv_SE.arb b/lib/l10n/sv_SE/app_sv_SE.arb index 72eee060..e14da801 100644 --- a/lib/l10n/sv_SE/app_sv_SE.arb +++ b/lib/l10n/sv_SE/app_sv_SE.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Skapa ny lagerplats", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "Ingen plats specificerad", "@locationNotSet": {}, "locationUpdated": "Lagerplatsen uppdaterad", diff --git a/lib/l10n/th_TH/app_th_TH.arb b/lib/l10n/th_TH/app_th_TH.arb index 2206a8ce..d37c3c30 100644 --- a/lib/l10n/th_TH/app_th_TH.arb +++ b/lib/l10n/th_TH/app_th_TH.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Create new stock location", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "No location specified", "@locationNotSet": {}, "locationUpdated": "Stock location updated", diff --git a/lib/l10n/tr_TR/app_tr_TR.arb b/lib/l10n/tr_TR/app_tr_TR.arb index 804aaae5..3bfed5e6 100644 --- a/lib/l10n/tr_TR/app_tr_TR.arb +++ b/lib/l10n/tr_TR/app_tr_TR.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Yeni stok konumu oluştur", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "Belirtilmiş konum yok", "@locationNotSet": {}, "locationUpdated": "Stok lokasyonu güncellendi", diff --git a/lib/l10n/vi_VN/app_vi_VN.arb b/lib/l10n/vi_VN/app_vi_VN.arb index 8639cdbb..fd0d2710 100644 --- a/lib/l10n/vi_VN/app_vi_VN.arb +++ b/lib/l10n/vi_VN/app_vi_VN.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "Thêm mới vị trí kho hàng", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "Không xác định được vị trí", "@locationNotSet": {}, "locationUpdated": "Cập nhật vị trí kho hàng", diff --git a/lib/l10n/zh_CN/app_zh_CN.arb b/lib/l10n/zh_CN/app_zh_CN.arb index fb1bd417..28261460 100644 --- a/lib/l10n/zh_CN/app_zh_CN.arb +++ b/lib/l10n/zh_CN/app_zh_CN.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "创建新库存地点", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "没有指定仓储位置", "@locationNotSet": {}, "locationUpdated": "库存地点已更新", diff --git a/lib/l10n/zh_TW/app_zh_TW.arb b/lib/l10n/zh_TW/app_zh_TW.arb index 6d6f300d..849aefec 100644 --- a/lib/l10n/zh_TW/app_zh_TW.arb +++ b/lib/l10n/zh_TW/app_zh_TW.arb @@ -510,6 +510,8 @@ "@locationCreate": {}, "locationCreateDetail": "創建新庫存地點", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "沒有指定倉儲位置", "@locationNotSet": {}, "locationUpdated": "庫存地點已更新", From a75245b183f473b9e8b8d1e29cfc05f67cd6329c Mon Sep 17 00:00:00 2001 From: Alexander Leisentritt Date: Wed, 19 Nov 2025 20:44:02 +0100 Subject: [PATCH 23/40] Add zoom slider to barcode scanning (#725) --- lib/barcode/camera_controller.dart | 57 ++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/lib/barcode/camera_controller.dart b/lib/barcode/camera_controller.dart index c4567210..0cfe9cbd 100644 --- a/lib/barcode/camera_controller.dart +++ b/lib/barcode/camera_controller.dart @@ -41,6 +41,8 @@ class _CameraBarcodeControllerState extends InvenTreeBarcodeControllerState { String scanned_code = ""; + double zoomFactor = 0.0; + final MobileScannerController controller = MobileScannerController( autoZoom: true, ); @@ -311,6 +313,60 @@ class _CameraBarcodeControllerState extends InvenTreeBarcodeControllerState { return SpeedDial(icon: Icons.more_horiz, children: actions); } + Widget zoomSlider() { + return Positioned( + left: 0, + right: 0, + bottom: 16, + child: Center( + child: Container( + width: 225, + height: 56, + decoration: BoxDecoration( + color: Colors.black.withValues(alpha: 0.3), + borderRadius: BorderRadius.circular(28), + ), + padding: EdgeInsets.symmetric(horizontal: 16), + child: Row( + children: [ + Icon(TablerIcons.zoom_out, color: Colors.white, size: 20), + Expanded( + child: Slider( + value: zoomFactor, + min: 0.0, + max: 1.0, + activeColor: Colors.white, + inactiveColor: Colors.white.withValues(alpha: 0.3), + onChanged: (value) { + setState(() { + zoomFactor = value; + controller.setZoomScale(value); + }); + }, + onChangeStart: (value) async { + if (mounted) { + setState(() { + scanning_paused = true; + }); + } + }, + onChangeEnd: (value) async { + if (mounted) { + setState(() { + scanning_paused = false; + }); + } + }, + ), + ), + Icon(TablerIcons.zoom_in, color: Colors.white, size: 20), + ], + ), + ), + ), + ); + } + @override Widget build(BuildContext context) { return Scaffold( @@ -333,6 +389,7 @@ class _CameraBarcodeControllerState extends InvenTreeBarcodeControllerState { Column(children: [Expanded(child: BarcodeReader(context))]), topCenterOverlay(), bottomCenterOverlay(), + zoomSlider(), ], ), ), From d039f3cfcfa7335ced082a0898ce69a75ae7ddb9 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 20 Nov 2025 06:48:19 +1100 Subject: [PATCH 24/40] New Crowdin updates (#722) * New translations app_en.arb (German) * New translations app_en.arb (German) * New translations app_en.arb (Romanian) * New translations app_en.arb (Italian) * New translations app_en.arb (Swedish) --- lib/l10n/de_DE/app_de_DE.arb | 38 +++++++++++++++---------------- lib/l10n/it_IT/app_it_IT.arb | 44 ++++++++++++++++++------------------ lib/l10n/ro_RO/app_ro_RO.arb | 2 +- lib/l10n/sv_SE/app_sv_SE.arb | 2 +- 4 files changed, 43 insertions(+), 43 deletions(-) diff --git a/lib/l10n/de_DE/app_de_DE.arb b/lib/l10n/de_DE/app_de_DE.arb index a6725bd4..c92af223 100644 --- a/lib/l10n/de_DE/app_de_DE.arb +++ b/lib/l10n/de_DE/app_de_DE.arb @@ -240,7 +240,7 @@ "@deletePartDetail": {}, "deleteSuccess": "Löschvorgang erfolgreich", "@deleteSuccess": {}, - "deliveryDate": "Delivery Date", + "deliveryDate": "Lieferdatum", "@deliveryDate": {}, "description": "Beschreibung", "@description": {}, @@ -384,9 +384,9 @@ "@homeShowPo": {}, "homeShowPoDescription": "Bestellungen auf Startseite anzeigen", "@homeShowPoDescription": {}, - "homeShowShipments": "Show Shipments", + "homeShowShipments": "Lieferungen anzeigen", "@homeShowShipments": {}, - "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "homeShowShipmentsDescription": "Ausstehende Lieferaufträge auf der Startseite anzeigen", "@homeShowShipmentsDescription": {}, "homeShowSo": "Aufträge anzeigen", "@homeShowSo": {}, @@ -454,9 +454,9 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Ungültige Kombination aus Benutzername und Passwort", "@invalidUsernamePassword": {}, - "invoice": "Invoice", + "invoice": "Rechnung", "@invoice": {}, - "invoiceNumber": "Invoice Number", + "invoiceNumber": "Rechnungsnummer", "@invoiceNumber": {}, "issue": "Aufgeben", "@issue": {}, @@ -510,7 +510,7 @@ "@locationCreate": {}, "locationCreateDetail": "Neuen Lagerort erstellen", "@locationCreateDetail": {}, - "locationDefault": "Default Location", + "locationDefault": "Standard Lagerort", "@locationDefault": {}, "locationNotSet": "Lagerort nicht angegeben", "@locationNotSet": {}, @@ -540,9 +540,9 @@ "@missingData": {}, "name": "Name", "@name": {}, - "no": "No", + "no": "Nein", "@no": {}, - "notApplicable": "N/A", + "notApplicable": "nicht verfügbar", "@notApplicable": {}, "notConnected": "Nicht verbunden", "@notConnected": {}, @@ -656,7 +656,7 @@ "@password": {}, "passwordEmpty": "Passwort darf nicht leer sein", "@passwordEmpty": {}, - "pending": "Pending", + "pending": "Ausstehend", "@pending": {}, "permissionAccountDenied": "Das Konto hat die erforderlichen Berechtigungen zum Ausführen dieses Vorgangs nicht", "@permissionAccountDenied": {}, @@ -936,23 +936,23 @@ "@serverNotConnected": {}, "serverNotSelected": "Server nicht ausgewählt", "@serverNotSelected": {}, - "shipment": "Shipment", + "shipment": "Sendung", "@shipment": {}, "shipments": "Lieferungen", "@shipments": {}, - "shipmentsPending": "Pending Shipments", + "shipmentsPending": "Ausstehende Sendungen", "@shipmentsPending": {}, "shipmentAdd": "Lieferung hinzufügen", "@shipmentAdd": {}, - "shipmentCheck": "Check Shipment", + "shipmentCheck": "Sendung prüfen", "@shipmentCheck": {}, - "shipmentCheckDetail": "Mark this shipment as checked", + "shipmentCheckDetail": "Diese Sendung als geprüft markieren", "@shipmentCheckDetail": {}, - "shipmentChecked": "Shipment Checked", + "shipmentChecked": "Sendung geprüft", "@shipmentChecked": {}, - "shipmentDate": "Shipment Date", + "shipmentDate": "Versanddatum", "@shipmentDate": {}, - "shipmentEdit": "Edit Shipment", + "shipmentEdit": "Sendung bearbeiten", "@shipmentEdit": {}, "shipmentReference": "Shipment Reference", "@shipmentReference": {}, @@ -1108,7 +1108,7 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Gesamtbetrag", "@totalPrice": {}, - "trackingNumber": "Tracking Number", + "trackingNumber": "Sendungsverfolgungsnummer", "@trackingNumber": {}, "transfer": "Verschieben", "@transfer": { @@ -1170,13 +1170,13 @@ "@viewSupplierPart": {}, "website": "Website", "@website": {}, - "yes": "Yes", + "yes": "Ja", "@yes": {}, "price": "Preis", "@price": {}, "priceRange": "Preisspanne", "@priceRange": {}, - "priceOverrideMin": "Minimum Price Override", + "priceOverrideMin": "Mindestpreis überschreiben", "@priceOverrideMin": {}, "priceOverrideMax": "Maximum Price Override", "@priceOverrideMax": {}, diff --git a/lib/l10n/it_IT/app_it_IT.arb b/lib/l10n/it_IT/app_it_IT.arb index d50a788c..81a74a8c 100644 --- a/lib/l10n/it_IT/app_it_IT.arb +++ b/lib/l10n/it_IT/app_it_IT.arb @@ -46,7 +46,7 @@ "@aspectRatioSquare": {}, "allocateStock": "Alloca stock", "@allocateStock": {}, - "allocatedStock": "Allocated Stock", + "allocatedStock": "Scorte Assegnate", "@allocatedStock": {}, "appReleaseNotes": "Mostra le note di rilascio dell'app", "@appReleaseNotes": {}, @@ -240,7 +240,7 @@ "@deletePartDetail": {}, "deleteSuccess": "Operazione di eliminazione riuscita", "@deleteSuccess": {}, - "deliveryDate": "Delivery Date", + "deliveryDate": "Data di consegna", "@deliveryDate": {}, "description": "Descrizione", "@description": {}, @@ -384,9 +384,9 @@ "@homeShowPo": {}, "homeShowPoDescription": "Mostra il pulsante ordine d'acquisto nella schermata home", "@homeShowPoDescription": {}, - "homeShowShipments": "Show Shipments", + "homeShowShipments": "Mostra Spedizioni", "@homeShowShipments": {}, - "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "homeShowShipmentsDescription": "Mostra le spedizioni in sospeso nella schermata home", "@homeShowShipmentsDescription": {}, "homeShowSo": "Mostra ordini di vendita", "@homeShowSo": {}, @@ -454,9 +454,9 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Combinazione nome utente e password non valida", "@invalidUsernamePassword": {}, - "invoice": "Invoice", + "invoice": "Fattura", "@invoice": {}, - "invoiceNumber": "Invoice Number", + "invoiceNumber": "Numero Fattura", "@invoiceNumber": {}, "issue": "Problema", "@issue": {}, @@ -510,7 +510,7 @@ "@locationCreate": {}, "locationCreateDetail": "Crea nuova ubicazione di magazzino", "@locationCreateDetail": {}, - "locationDefault": "Default Location", + "locationDefault": "Posizione Predefinita", "@locationDefault": {}, "locationNotSet": "Nessuna ubicazione specificata", "@locationNotSet": {}, @@ -656,7 +656,7 @@ "@password": {}, "passwordEmpty": "La password non può essere vuota", "@passwordEmpty": {}, - "pending": "Pending", + "pending": "In sospeso", "@pending": {}, "permissionAccountDenied": "Non disponi dei permessi per eseguire l'azione", "@permissionAccountDenied": {}, @@ -936,33 +936,33 @@ "@serverNotConnected": {}, "serverNotSelected": "Server non selezionato", "@serverNotSelected": {}, - "shipment": "Shipment", + "shipment": "Spedizione", "@shipment": {}, "shipments": "Spedizioni", "@shipments": {}, - "shipmentsPending": "Pending Shipments", + "shipmentsPending": "Spedizioni in sospeso", "@shipmentsPending": {}, "shipmentAdd": "Aggiungi Spedizione", "@shipmentAdd": {}, - "shipmentCheck": "Check Shipment", + "shipmentCheck": "Controlla spedizione", "@shipmentCheck": {}, - "shipmentCheckDetail": "Mark this shipment as checked", + "shipmentCheckDetail": "Segna questa spedizione come controllata", "@shipmentCheckDetail": {}, - "shipmentChecked": "Shipment Checked", + "shipmentChecked": "Spedizione Controllata", "@shipmentChecked": {}, - "shipmentDate": "Shipment Date", + "shipmentDate": "Data di spedizione", "@shipmentDate": {}, - "shipmentEdit": "Edit Shipment", + "shipmentEdit": "Modifica spedizione", "@shipmentEdit": {}, - "shipmentReference": "Shipment Reference", + "shipmentReference": "Riferimento della spedizione", "@shipmentReference": {}, - "shipmentSend": "Send Shipment", + "shipmentSend": "Invia Spedizione", "@shipmentSend": {}, - "shipmentUncheck": "Uncheck Shipment", + "shipmentUncheck": "Deseleziona Spedizione", "@shipmentUncheck": {}, - "shipmentUncheckDetail": "Mark this shipment as unchecked", + "shipmentUncheckDetail": "Contrassegna questa spedizione come non controllata", "@shipmentUncheckDetail": {}, - "shipmentUpdated": "Shipment Updated", + "shipmentUpdated": "Spedizione Aggiornata", "@shipmentUpdated": {}, "shipped": "Spedito", "@shipped": {}, @@ -1108,7 +1108,7 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Prezzo Totale", "@totalPrice": {}, - "trackingNumber": "Tracking Number", + "trackingNumber": "Numero Di Tracking", "@trackingNumber": {}, "transfer": "Trasferisci", "@transfer": { @@ -1170,7 +1170,7 @@ "@viewSupplierPart": {}, "website": "Sito Web", "@website": {}, - "yes": "Yes", + "yes": "Si", "@yes": {}, "price": "Prezzo", "@price": {}, diff --git a/lib/l10n/ro_RO/app_ro_RO.arb b/lib/l10n/ro_RO/app_ro_RO.arb index 67150c02..ca8982e6 100644 --- a/lib/l10n/ro_RO/app_ro_RO.arb +++ b/lib/l10n/ro_RO/app_ro_RO.arb @@ -510,7 +510,7 @@ "@locationCreate": {}, "locationCreateDetail": "Creează o nouă locație de stoc", "@locationCreateDetail": {}, - "locationDefault": "Default Location", + "locationDefault": "Locație implicită", "@locationDefault": {}, "locationNotSet": "Nici o locaţie specificată", "@locationNotSet": {}, diff --git a/lib/l10n/sv_SE/app_sv_SE.arb b/lib/l10n/sv_SE/app_sv_SE.arb index e14da801..8d7c4566 100644 --- a/lib/l10n/sv_SE/app_sv_SE.arb +++ b/lib/l10n/sv_SE/app_sv_SE.arb @@ -656,7 +656,7 @@ "@password": {}, "passwordEmpty": "Lösenordet får inte vara tomt", "@passwordEmpty": {}, - "pending": "Pending", + "pending": "Väntande", "@pending": {}, "permissionAccountDenied": "Ditt konto har inte de rättigheter som krävs för att utföra denna åtgärd", "@permissionAccountDenied": {}, From e41842a31dbad2e1c8e6e83280562b6d2966cc5f Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 20 Nov 2025 07:51:19 +1100 Subject: [PATCH 25/40] Barcode tweaks (#726) * Barcode tweaks - Disable autozoom - Update release notes - Update contributor credits * format --- assets/credits.md | 1 + assets/release_notes.md | 1 + lib/barcode/camera_controller.dart | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/assets/credits.md b/assets/credits.md index abf8611d..31eb4f0d 100644 --- a/assets/credits.md +++ b/assets/credits.md @@ -10,6 +10,7 @@ Thanks to the following contributors, for their work building this app! - [Bobbe](https://github.com/30350n) - [awnz](https://github.com/awnz) - [joaomnuno](https://github.com/joaomnuno) +- [Alex9779](https://github.com/Alex9779) -------- ## Assets diff --git a/assets/release_notes.md b/assets/release_notes.md index 413d34ae..21b0d09a 100644 --- a/assets/release_notes.md +++ b/assets/release_notes.md @@ -1,6 +1,7 @@ ### 0.21.0 - November 2025 --- +- Adds zoom controller for barcode scanner camera view - Display default stock location in Part detail page - Display stock information in SupplierPart detail page diff --git a/lib/barcode/camera_controller.dart b/lib/barcode/camera_controller.dart index 0cfe9cbd..2baaca0a 100644 --- a/lib/barcode/camera_controller.dart +++ b/lib/barcode/camera_controller.dart @@ -44,7 +44,7 @@ class _CameraBarcodeControllerState extends InvenTreeBarcodeControllerState { double zoomFactor = 0.0; final MobileScannerController controller = MobileScannerController( - autoZoom: true, + autoZoom: false, // Disable autoZoom as we implement a manual slider ); @override From 13d95dd1b17328748b62e7f4eb49871ac1137d55 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 22 Nov 2025 07:26:37 +1100 Subject: [PATCH 26/40] Modern Label printing (#724) * Basic widget * Redirect label printing action * Refactor label printing code * Construct form elements * Refactor to allow re-use of forms * Basic rendering of label printing form * Remove dead code * Pass custom handler through to form context * Refactoring API forms: - Allow custom pk field name - Add callback when values change * linting * Dynamically rebuild form * Handle nested fields * Handle label printing status * Run dart format * Update release notes * Remove unused var * Enable close icon * Handle initial plugin default value * Store default values: - Selected template (per label type) - Selected printing plugin * Dart format * Fix dart linting * use setter * Just use a public field --- assets/release_notes.md | 1 + lib/api.dart | 17 +- lib/api_form.dart | 233 ++++++++------ lib/l10n/app_en.arb | 6 + lib/labels.dart | 422 ++++++++++++++----------- lib/preferences.dart | 4 + lib/widget/part/part_detail.dart | 32 +- lib/widget/snacks.dart | 1 + lib/widget/stock/location_display.dart | 39 +-- lib/widget/stock/stock_detail.dart | 38 +-- 10 files changed, 425 insertions(+), 368 deletions(-) diff --git a/assets/release_notes.md b/assets/release_notes.md index 21b0d09a..f97832ac 100644 --- a/assets/release_notes.md +++ b/assets/release_notes.md @@ -1,6 +1,7 @@ ### 0.21.0 - November 2025 --- +- Support label printing again, fixing issues with new printing API - Adds zoom controller for barcode scanner camera view - Display default stock location in Part detail page - Display stock information in SupplierPart detail page diff --git a/lib/api.dart b/lib/api.dart index a2a48f9d..1d24b397 100644 --- a/lib/api.dart +++ b/lib/api.dart @@ -7,6 +7,7 @@ import "package:http/http.dart" as http; import "package:http/io_client.dart"; import "package:intl/intl.dart"; import "package:inventree/main.dart"; +import "package:inventree/widget/progress.dart"; import "package:one_context/one_context.dart"; import "package:open_filex/open_filex.dart"; import "package:cached_network_image/cached_network_image.dart"; @@ -912,6 +913,8 @@ class InvenTreeAPI { var client = createClient(url, strictHttps: strictHttps); + showLoadingOverlay(); + // Attempt to open a connection to the server try { _request = await client @@ -953,6 +956,7 @@ class InvenTreeAPI { await localFile.writeAsBytes(bytes); if (openOnDownload) { + hideLoadingOverlay(); OpenFilex.open(local_path); } } else { @@ -972,6 +976,8 @@ class InvenTreeAPI { stackTrace, ); } + + hideLoadingOverlay(); } /* @@ -1085,8 +1091,15 @@ class InvenTreeAPI { * We send this with the currently selected "locale", * so that (hopefully) the field messages are correctly translated */ - Future options(String url) async { - HttpClientRequest? request = await apiRequest(url, "OPTIONS"); + Future options( + String url, { + Map params = const {}, + }) async { + HttpClientRequest? request = await apiRequest( + url, + "OPTIONS", + urlParams: params, + ); if (request == null) { // Return an "invalid" APIResponse diff --git a/lib/api_form.dart b/lib/api_form.dart index 7852c452..ea0bc79b 100644 --- a/lib/api_form.dart +++ b/lib/api_form.dart @@ -26,23 +26,52 @@ import "package:inventree/widget/fields.dart"; import "package:inventree/widget/progress.dart"; import "package:inventree/widget/snacks.dart"; +/* + * Extract field options from a returned OPTIONS request + */ +Map extractFields(APIResponse response) { + if (!response.isValid()) { + return {}; + } + + var data = response.asMap(); + + if (!data.containsKey("actions")) { + return {}; + } + + var actions = response.data["actions"] as Map; + + dynamic result = actions["POST"] ?? actions["PUT"] ?? actions["PATCH"] ?? {}; + + return result as Map; +} + /* * Class that represents a single "form field", * defined by the InvenTree API */ class APIFormField { // Constructor - APIFormField(this.name, this.data); + APIFormField(this.name, this.data, {this.formHandler}); // File to be uploaded for this filed File? attachedfile; + APIFormWidgetState? formHandler; + // Name of this field final String name; // JSON data which defines the field final Map data; + // Function to update the value of this field + void setFieldValue(dynamic val) { + data["value"] = val; + formHandler?.onValueChanged(name, value); + } + // JSON field definition provided by the server Map definition = {}; @@ -88,6 +117,8 @@ class APIFormField { } } + String get pk_field => (getParameter("pk_field") ?? "pk") as String; + // Get the "api_url" associated with a related field String get api_url => (getParameter("api_url") ?? "") as String; @@ -244,18 +275,13 @@ class APIFormField { return; } - int? pk = int.tryParse(value.toString()); - - if (pk == null) { - return; - } - - String url = api_url + "/" + pk.toString() + "/"; + String url = api_url + "/" + value.toString() + "/"; final APIResponse response = await InvenTreeAPI().get(url, params: filters); if (response.successful()) { initial_data = response.data; + formHandler?.onValueChanged(name, value); } } @@ -269,6 +295,7 @@ class APIFormField { return _constructBoolean(); case "related field": return _constructRelatedField(); + case "integer": case "float": case "decimal": return _constructFloatField(); @@ -318,8 +345,7 @@ class APIFormField { onPressed: () async { var handler = UniqueBarcodeHandler((String hash) { controller.text = hash; - data["value"] = hash; - + setFieldValue(hash); barcodeSuccess(L10().barcodeAssigned); }); @@ -347,9 +373,9 @@ class APIFormField { onChanged: (DateTime? time) { // Save the time string if (time == null) { - data["value"] = null; + setFieldValue(null); } else { - data["value"] = time.toString().split(" ").first; + setFieldValue(time.toString().split(" ").first); } }, onShowPicker: (context, value) async { @@ -432,9 +458,9 @@ class APIFormField { }, onSaved: (item) { if (item == null) { - data["value"] = null; + setFieldValue(null); } else { - data["value"] = item["value"]; + setFieldValue(item["value"]); } }, ); @@ -481,7 +507,7 @@ class APIFormField { return null; }, onSaved: (val) { - data["value"] = val; + setFieldValue(val); }, ); } @@ -527,7 +553,20 @@ class APIFormField { hintText: helpText, ), ), - onChanged: null, + onChanged: (item) { + if (item != null) { + setFieldValue(item[pk_field]); + } else { + setFieldValue(null); + } + }, + onSaved: (item) { + if (item != null) { + setFieldValue(item[pk_field]); + } else { + setFieldValue(null); + } + }, itemAsString: (dynamic item) { Map data = item as Map; @@ -551,13 +590,6 @@ class APIFormField { dropdownBuilder: (context, item) { return _renderRelatedField(name, item, true, false); }, - onSaved: (item) { - if (item != null) { - data["value"] = item["pk"]; - } else { - data["value"] = null; - } - }, compareFn: (dynamic item, dynamic selectedItem) { // Comparison is based on the PK value @@ -568,7 +600,8 @@ class APIFormField { bool result = false; try { - result = item["pk"].toString() == selectedItem["pk"].toString(); + result = + item[pk_field].toString() == selectedItem[pk_field].toString(); } catch (error) { // Catch any conversion errors result = false; @@ -765,6 +798,18 @@ class APIFormField { so.customer?.thumbnail ?? so.customer?.image ?? "", ), ); + case "labeltemplate": + return ListTile( + title: Text((data["name"] ?? "").toString()), + subtitle: Text((data["description"] ?? "").toString()), + ); + case "pluginconfig": + return ListTile( + title: Text( + (data["meta"]?["human_name"] ?? data["name"] ?? "").toString(), + ), + subtitle: Text((data["meta"]?["description"] ?? "").toString()), + ); default: return ListTile( title: Text( @@ -810,8 +855,11 @@ class APIFormField { maxLines: multiline ? null : 1, expands: false, initialValue: (value ?? "") as String, + onChanged: (val) { + setFieldValue(val); + }, onSaved: (val) { - data["value"] = val; + setFieldValue(val); }, validator: (value) { if (required && (value == null || value.isEmpty)) { @@ -842,7 +890,7 @@ class APIFormField { initial: initial_value, tristate: (getParameter("tristate") ?? false) as bool, onSaved: (val) { - data["value"] = val; + setFieldValue(val); }, ); } @@ -865,27 +913,6 @@ class APIFormField { } } -/* - * Extract field options from a returned OPTIONS request - */ -Map extractFields(APIResponse response) { - if (!response.isValid()) { - return {}; - } - - var data = response.asMap(); - - if (!data.containsKey("actions")) { - return {}; - } - - var actions = response.data["actions"] as Map; - - dynamic result = actions["POST"] ?? actions["PUT"] ?? actions["PATCH"] ?? {}; - - return result as Map; -} - /* * Extract a field definition (map) from the provided JSON data. * @@ -981,6 +1008,7 @@ Future launchApiForm( Function(Map)? onSuccess, bool Function(Map)? validate, Function? onCancel, + APIFormWidgetState? formHandler, IconData icon = TablerIcons.device_floppy, }) async { showLoadingOverlay(); @@ -1041,7 +1069,7 @@ Future launchApiForm( field.data["instance_value"] = model_value; if (field.data["value"] == null) { - field.data["value"] = model_value; + field.setFieldValue(model_value); } } formFields.add(field); @@ -1066,6 +1094,7 @@ Future launchApiForm( onSuccess: onSuccess, validate: validate, fileField: fileField, + state: formHandler, icon: icon, ), ), @@ -1079,6 +1108,7 @@ class APIFormWidget extends StatefulWidget { this.fields, this.method, { Key? key, + this.state, this.onSuccess, this.validate, this.fileField = "", @@ -1105,12 +1135,15 @@ class APIFormWidget extends StatefulWidget { final bool Function(Map)? validate; + final APIFormWidgetState? state; + + // Default form handler is constructed if none is provided @override - _APIFormWidgetState createState() => _APIFormWidgetState(); + APIFormWidgetState createState() => state ?? APIFormWidgetState(); } -class _APIFormWidgetState extends State { - _APIFormWidgetState() : super(); +class APIFormWidgetState extends State { + APIFormWidgetState() : super(); final _formKey = GlobalKey(); @@ -1118,6 +1151,33 @@ class _APIFormWidgetState extends State { bool spacerRequired = false; + // Return a list of all fields used for this form + // The default implementation just returns the fields provided to the widget + // However, custom form implementations may override this function + List get formFields { + final List fields = widget.fields; + + // Ensure each field has access to this form handler + for (var field in fields) { + field.formHandler ??= this; + } + + return fields; + } + + // Callback for when a field value is changed + // Default implementation does nothing, + // but custom form implementations may override this function + void onValueChanged(String field, dynamic value) {} + + Future handleSuccess( + Map submittedData, + Map responseData, + ) async { + widget.onSuccess?.call(responseData); + Navigator.pop(context); + } + List _buildForm() { List widgets = []; @@ -1135,7 +1195,7 @@ class _APIFormWidgetState extends State { widgets.add(Divider(height: 5)); } - for (var field in widget.fields) { + for (var field in formFields) { if (field.hidden) { continue; } @@ -1190,7 +1250,7 @@ class _APIFormWidgetState extends State { // Pop the "file" field data.remove(widget.fileField); - for (var field in widget.fields) { + for (var field in formFields) { if (field.name == widget.fileField) { File? file = field.attachedfile; @@ -1275,7 +1335,7 @@ class _APIFormWidgetState extends State { match = true; continue; default: - for (var field in widget.fields) { + for (var field in formFields) { // Hidden fields can't display errors, so we won't match if (field.hidden) { continue; @@ -1327,7 +1387,7 @@ class _APIFormWidgetState extends State { // Iterate through and find "simple" top-level fields - for (var field in widget.fields) { + for (var field in formFields) { if (field.readOnly) { continue; } @@ -1366,20 +1426,11 @@ class _APIFormWidgetState extends State { return; } - // Run custom onSuccess function - var successFunc = widget.onSuccess; - // An "empty" URL means we don't want to submit the form anywhere // Perhaps we just want to process the data? if (widget.url.isEmpty) { // Hide the form - Navigator.pop(context); - - if (successFunc != null) { - // Return the raw "submitted" data, rather than the server response - successFunc(data); - } - + handleSuccess(data, {}); return; } @@ -1394,29 +1445,24 @@ class _APIFormWidgetState extends State { case 200: case 201: // Form was successfully validated by the server + // Ensure the response is a valid JSON structure + Map json = {}; - // Hide this form - Navigator.pop(context); + var responseData = response.asMap(); - if (successFunc != null) { - // Ensure the response is a valid JSON structure - Map json = {}; - - var data = response.asMap(); - - for (String key in data.keys) { - json[key.toString()] = data[key]; - } - - successFunc(json); + for (String key in responseData.keys) { + json[key.toString()] = responseData[key]; } + + handleSuccess(data, json); + return; case 400: // Form submission / validation error showSnackIcon(L10().formError, success: false); // Update field errors - for (var field in widget.fields) { + for (var field in formFields) { field.extractErrorMessages(response); } @@ -1444,6 +1490,22 @@ class _APIFormWidgetState extends State { }); } + // Construct the internal form widget, based on the provided fields + Widget buildForm(BuildContext context) { + return Form( + key: _formKey, + child: SingleChildScrollView( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: _buildForm(), + ), + padding: EdgeInsets.all(16), + ), + ); + } + @override Widget build(BuildContext context) { return Scaffold( @@ -1463,18 +1525,7 @@ class _APIFormWidgetState extends State { ), ], ), - body: Form( - key: _formKey, - child: SingleChildScrollView( - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: _buildForm(), - ), - padding: EdgeInsets.all(16), - ), - ), + body: buildForm(context), ); } } diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index b57df1f1..9ea177e9 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -695,6 +695,12 @@ "keywords": "Keywords", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, + "labelPrinting": "Label Printing", "@labelPrinting": {}, diff --git a/lib/labels.dart b/lib/labels.dart index 10e2c205..2b7cc270 100644 --- a/lib/labels.dart +++ b/lib/labels.dart @@ -1,11 +1,206 @@ import "package:flutter/cupertino.dart"; -import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; +import "package:flutter/material.dart"; import "package:inventree/api.dart"; -import "package:inventree/widget/progress.dart"; +import "package:inventree/preferences.dart"; import "package:inventree/api_form.dart"; import "package:inventree/l10.dart"; +import "package:inventree/widget/progress.dart"; import "package:inventree/widget/snacks.dart"; +const String PRINT_LABEL_URL = "api/label/print/"; + +/* + * Custom form handler for label printing. + * Required to manage dynamic form fields. + */ +class LabelFormWidgetState extends APIFormWidgetState { + LabelFormWidgetState() : super(); + + List dynamicFields = []; + + String pluginKey = ""; + String labelType = ""; + + @override + List get formFields { + final baseFields = super.formFields; + + if (pluginKey.isEmpty) { + // Handle case where default plugin is provided + final APIFormField pluginField = baseFields.firstWhere( + (field) => field.name == "plugin", + ); + + if (pluginField.initial_data != null) { + pluginKey = pluginField.value.toString(); + onValueChanged("plugin", pluginKey); + } + } + + return [...baseFields, ...dynamicFields]; + } + + @override + void onValueChanged(String field, dynamic value) { + if (field == "plugin") { + onPluginChanged(value.toString()); + } + } + + @override + Future handleSuccess( + Map submittedData, + Map responseData, + ) async { + super.handleSuccess(submittedData, responseData); + + // Save default values to the database + final String? plugin = submittedData["plugin"]?.toString(); + final int? template = submittedData["template"] as int?; + + // Save default printing plugin + if (plugin != null) { + InvenTreeSettingsManager().setValue(INV_LABEL_DEFAULT_PLUGIN, plugin); + } + + // Save default template for this label type + if (labelType.isNotEmpty && template != null) { + final defaultTemplates = + await InvenTreeSettingsManager().getValue( + INV_LABEL_DEFAULT_TEMPLATES, + null, + ) + as Map?; + + InvenTreeSettingsManager().setValue(INV_LABEL_DEFAULT_TEMPLATES, { + ...?defaultTemplates, + labelType: template, + }); + } + } + + /* + * Re-fetch printing options when the plugin changes + */ + Future onPluginChanged(String key) async { + showLoadingOverlay(); + + InvenTreeAPI().options(PRINT_LABEL_URL, params: {"plugin": key}).then(( + APIResponse response, + ) { + if (response.isValid()) { + updateFields(response); + hideLoadingOverlay(); + } + }); + } + + /* + * Callback when the server responds with printing options, + * based on the selected printing plugin + */ + Future updateFields(APIResponse response) async { + Map printingFields = extractFields(response); + + // Find only the fields which are not in the "base" fields + List uniqueFields = []; + + for (String key in printingFields.keys) { + if (super.formFields.any((field) => field.name == key)) { + continue; + } + + dynamic data = printingFields[key]; + + Map fieldData = {}; + + if (data is Map) { + fieldData = Map.from(data); + } + + APIFormField field = APIFormField(key, fieldData); + field.definition = extractFieldDefinition( + printingFields, + field.lookupPath, + ); + + if (field.type == "dependent field") { + // Dependent fields must be handled separately + + // TODO: This should be refactored into api_form.dart + dynamic child = field.definition["child"]; + + if (child != null && child is Map) { + Map child_map = child as Map; + dynamic nested_children = child_map["children"]; + + if (nested_children != null && nested_children is Map) { + Map nested_child_map = + nested_children as Map; + + for (var field_key in nested_child_map.keys) { + field = APIFormField(field_key, nested_child_map); + field.definition = extractFieldDefinition( + nested_child_map, + field_key, + ); + uniqueFields.add(field); + } + } + } + } else { + // This is a "standard" (non-nested) field + uniqueFields.add(field); + } + } + + if (mounted) { + setState(() { + dynamicFields = uniqueFields; + }); + } + } +} + +Future handlePrintingSuccess( + BuildContext context, + Map data, + int repeatCount, +) async { + const int MAX_REPEATS = 60; + + int id = (data["pk"] ?? -1) as int; + bool complete = (data["complete"] ?? false) as bool; + bool error = data["errors"] != null; + String? output = data["output"] as String?; + + if (complete) { + if (output != null && output.isNotEmpty) { + // An output was generated - we can download it! + showSnackIcon(L10().downloading, success: true); + InvenTreeAPI().downloadFile(output); + } else { + // Label was offloaded, likely to an external printer + showSnackIcon(L10().printLabelSuccess, success: true); + } + } else if (error) { + showSnackIcon(L10().printLabelFailure, success: false); + } else if (repeatCount < MAX_REPEATS && id > 0) { + // Printing is not yet complete, but we have a valid output ID + Future.delayed(Duration(milliseconds: 1000), () async { + // Re-query the printing status + InvenTreeAPI().get("data-output/$id/").then((response) { + if (response.statusCode == 200) { + if (response.data is Map) { + final responseData = response.data as Map; + handlePrintingSuccess(context, responseData, repeatCount + 1); + } + } + }); + }); + } +} + /* * Select a particular label, from a provided list of options, * and print against the selected instances. @@ -13,202 +208,73 @@ import "package:inventree/widget/snacks.dart"; */ Future selectAndPrintLabel( BuildContext context, - List> labels, - int instanceId, String labelType, - String labelQuery, + int instanceId, ) async { if (!InvenTreeAPI().isConnected()) { return; } - // Find a list of available plugins which support label printing - var plugins = InvenTreeAPI().getPlugins(mixin: "labels"); - - dynamic initial_label; - dynamic initial_plugin; - - List> label_options = []; - List> plugin_options = []; - - // Construct list of available label templates - for (var label in labels) { - String name = (label["name"] ?? "").toString(); - String description = (label["description"] ?? "").toString(); - - if (description.isNotEmpty) { - name += " - ${description}"; - } - - int pk = (label["pk"] ?? -1) as int; - - if (name.isNotEmpty && pk > 0) { - label_options.add({"display_name": name, "value": pk}); - } + if (!InvenTreeAPI().supportsModernLabelPrinting) { + // Legacy label printing API not supported + showSnackIcon("Label printing not supported by server", success: false); + return; } - if (label_options.length == 1) { - initial_label = label_options.first["value"]; + // Fetch default values for label printing + + // Default template + final defaultTemplates = await InvenTreeSettingsManager().getValue( + INV_LABEL_DEFAULT_TEMPLATES, + null, + ); + int? defaultTemplate; + + if (defaultTemplates != null && defaultTemplates is Map) { + defaultTemplate = defaultTemplates[labelType] as int?; } - // Construct list of available plugins - for (var plugin in plugins) { - plugin_options.add({"display_name": plugin.humanName, "value": plugin.key}); - } - - String selectedPlugin = await InvenTreeAPI().getUserSetting( - "LABEL_DEFAULT_PRINTER", + // Default plugin + final defaultPlugin = await InvenTreeSettingsManager().getValue( + INV_LABEL_DEFAULT_PLUGIN, + null, ); - if (selectedPlugin.isNotEmpty) { - initial_plugin = selectedPlugin; - } else if (plugin_options.length == 1) { - initial_plugin = plugin_options.first["value"]; - } - - Map fields = { - "label": { - "label": L10().labelTemplate, - "type": "choice", - "value": initial_label, - "choices": label_options, - "required": true, + // Specify a default list of fields for printing + // The selected plugin may optionally extend this list of fields dynamically + Map> baseFields = { + "template": { + "default": defaultTemplate, + "filters": { + "enabled": true, + "model_type": labelType, + "items": instanceId.toString(), + }, }, "plugin": { - "label": L10().pluginPrinter, - "type": "choice", - "value": initial_plugin, - "choices": plugin_options, - "required": true, + "default": defaultPlugin, + "pk_field": "key", + "filters": {"enabled": true, "mixin": "labels"}, + }, + "items": { + "hidden": true, + "value": [instanceId], }, }; + final formHandler = LabelFormWidgetState(); + formHandler.labelType = labelType; + launchApiForm( context, L10().printLabel, - "", - fields, - icon: TablerIcons.printer, - validate: (Map data) { - final template = data["label"]; - final plugin = data["plugin"]; - - if (template == null) { - showSnackIcon(L10().labelSelectTemplate, success: false); - return false; - } - - if (plugin == null) { - showSnackIcon(L10().labelSelectPrinter, success: false); - return false; - } - - return true; - }, - onSuccess: (Map data) async { - int labelId = (data["label"] ?? -1) as int; - var pluginKey = data["plugin"]; - - bool result = false; - - if (labelId != -1 && pluginKey != null) { - showLoadingOverlay(); - - if (InvenTreeAPI().supportsModernLabelPrinting) { - // Modern label printing API uses a POST request to a single API endpoint. - await InvenTreeAPI() - .post( - "/label/print/", - body: { - "plugin": pluginKey, - "template": labelId, - "items": [instanceId], - }, - ) - .then((APIResponse response) { - if (response.isValid() && - response.statusCode >= 200 && - response.statusCode <= 201) { - var data = response.asMap(); - - if (data.containsKey("output")) { - String? label_file = (data["output"]) as String?; - - if (label_file != null && label_file.isNotEmpty) { - // Attempt to open generated file - InvenTreeAPI().downloadFile(label_file); - } - - result = true; - } - } - }); - } else { - // Legacy label printing API - // Uses a GET request to a specially formed URL which depends on the parameters - String url = - "/label/${labelType}/${labelId}/print/?${labelQuery}&plugin=${pluginKey}"; - await InvenTreeAPI().get(url).then((APIResponse response) { - if (response.isValid() && response.statusCode == 200) { - var data = response.asMap(); - if (data.containsKey("file")) { - var label_file = (data["file"] ?? "") as String; - - // Attempt to open remote file - InvenTreeAPI().downloadFile(label_file); - result = true; - } - } - }); - } - - hideLoadingOverlay(); - - if (result) { - showSnackIcon(L10().printLabelSuccess, success: true); - } else { - showSnackIcon(L10().printLabelFailure, success: false); - } - } + PRINT_LABEL_URL, + baseFields, + method: "POST", + modelData: {"plugin": defaultPlugin, "template": defaultTemplate}, + formHandler: formHandler, + onSuccess: (data) async { + handlePrintingSuccess(context, data, 0); }, ); } - -/* - * Discover which label templates are available for a given item - */ -Future>> getLabelTemplates( - String labelType, - Map data, -) async { - if (!InvenTreeAPI().isConnected() || - !InvenTreeAPI().supportsMixin("labels")) { - return []; - } - - // Filter by active plugins - data["enabled"] = "true"; - - String url = "/label/template/"; - - if (InvenTreeAPI().supportsModernLabelPrinting) { - data["model_type"] = labelType; - } else { - // Legacy label printing API endpoint - url = "/label/${labelType}/"; - } - - List> labels = []; - - await InvenTreeAPI().get(url, params: data).then((APIResponse response) { - if (response.isValid() && response.statusCode == 200) { - for (var label in response.resultsList()) { - if (label is Map) { - labels.add(label); - } - } - } - }); - - return labels; -} diff --git a/lib/preferences.dart b/lib/preferences.dart index bf0d8ae4..de7bb0f0 100644 --- a/lib/preferences.dart +++ b/lib/preferences.dart @@ -25,7 +25,11 @@ const int SCREEN_ORIENTATION_LANDSCAPE = 2; const String INV_SOUNDS_BARCODE = "barcodeSounds"; const String INV_SOUNDS_SERVER = "serverSounds"; +// Label printing settings const String INV_ENABLE_LABEL_PRINTING = "enableLabelPrinting"; +const String INV_LABEL_DEFAULT_TEMPLATES = "defaultLabelTemplates"; +const String INV_LABEL_DEFAULT_PRINTER = "defaultLabelPrinter"; +const String INV_LABEL_DEFAULT_PLUGIN = "defaultLabelPlugin"; // Part settings const String INV_PART_SHOW_PARAMETERS = "partShowParameters"; diff --git a/lib/widget/part/part_detail.dart b/lib/widget/part/part_detail.dart index e54bb753..98cf1737 100644 --- a/lib/widget/part/part_detail.dart +++ b/lib/widget/part/part_detail.dart @@ -63,8 +63,6 @@ class _PartDisplayState extends RefreshableState { InvenTreePartPricing? partPricing; - List> labels = []; - @override String getAppBarTitle() => L10().partDetails; @@ -121,19 +119,13 @@ class _PartDisplayState extends RefreshableState { ); } - if (labels.isNotEmpty) { + if (allowLabelPrinting && api.supportsModernLabelPrinting) { actions.add( SpeedDialChild( child: Icon(TablerIcons.printer), label: L10().printLabel, onTap: () async { - selectAndPrintLabel( - context, - labels, - widget.part.pk, - "part", - "part=${widget.part.pk}", - ); + selectAndPrintLabel(context, "part", widget.part.pk); }, ), ); @@ -271,26 +263,6 @@ class _PartDisplayState extends RefreshableState { }); } }); - - List> _labels = []; - allowLabelPrinting &= api.supportsMixin("labels"); - - if (allowLabelPrinting) { - String model_type = api.supportsModernLabelPrinting - ? InvenTreePart.MODEL_TYPE - : "part"; - String item_key = api.supportsModernLabelPrinting ? "items" : "part"; - - _labels = await getLabelTemplates(model_type, { - item_key: widget.part.pk.toString(), - }); - } - - if (mounted) { - setState(() { - labels = _labels; - }); - } } void _editPartDialog(BuildContext context) { diff --git a/lib/widget/snacks.dart b/lib/widget/snacks.dart index 580955f2..f00b1ec1 100644 --- a/lib/widget/snacks.dart +++ b/lib/widget/snacks.dart @@ -64,6 +64,7 @@ void showSnackIcon( }, ), backgroundColor: backgroundColor, + showCloseIcon: true, action: onAction == null ? null : SnackBarAction( diff --git a/lib/widget/stock/location_display.dart b/lib/widget/stock/location_display.dart index 7719724a..f6f74db9 100644 --- a/lib/widget/stock/location_display.dart +++ b/lib/widget/stock/location_display.dart @@ -38,7 +38,7 @@ class _LocationDisplayState extends RefreshableState { final InvenTreeStockLocation? location; - List> labels = []; + bool allowLabelPrinting = false; @override String getAppBarTitle() { @@ -179,19 +179,15 @@ class _LocationDisplayState extends RefreshableState { ); } - if (widget.location != null && labels.isNotEmpty) { + if (widget.location != null && + allowLabelPrinting && + api.supportsModernLabelPrinting) { actions.add( SpeedDialChild( child: Icon(TablerIcons.printer), label: L10().printLabel, onTap: () async { - selectAndPrintLabel( - context, - labels, - widget.location!.pk, - "location", - "location=${widget.location!.pk}", - ); + selectAndPrintLabel(context, "stocklocation", widget.location!.pk); }, ), ); @@ -236,33 +232,10 @@ class _LocationDisplayState extends RefreshableState { } } - List> _labels = []; - bool allowLabelPrinting = await InvenTreeSettingsManager().getBool( + allowLabelPrinting = await InvenTreeSettingsManager().getBool( INV_ENABLE_LABEL_PRINTING, true, ); - allowLabelPrinting &= api.supportsMixin("labels"); - - if (allowLabelPrinting) { - if (widget.location != null) { - String model_type = api.supportsModernLabelPrinting - ? InvenTreeStockLocation.MODEL_TYPE - : "location"; - String item_key = api.supportsModernLabelPrinting - ? "items" - : "location"; - - _labels = await getLabelTemplates(model_type, { - item_key: widget.location!.pk.toString(), - }); - } - } - - if (mounted) { - setState(() { - labels = _labels; - }); - } } Future _newLocation(BuildContext context) async { diff --git a/lib/widget/stock/stock_detail.dart b/lib/widget/stock/stock_detail.dart index 648610c0..db295cac 100644 --- a/lib/widget/stock/stock_detail.dart +++ b/lib/widget/stock/stock_detail.dart @@ -128,19 +128,13 @@ class _StockItemDisplayState extends RefreshableState { ); } - if (labels.isNotEmpty) { + if (allowLabelPrinting && api.supportsModernLabelPrinting) { actions.add( SpeedDialChild( child: Icon(TablerIcons.printer), label: L10().printLabel, onTap: () async { - selectAndPrintLabel( - context, - labels, - widget.item.pk, - "stock", - "item=${widget.item.pk}", - ); + selectAndPrintLabel(context, "stockitem", widget.item.pk); }, ), ); @@ -196,10 +190,7 @@ class _StockItemDisplayState extends RefreshableState { return actions; } - // Is label printing enabled for this StockItem? - // This will be determined when the widget is loaded - List> labels = []; - + bool allowLabelPrinting = false; int attachmentCount = 0; @override @@ -318,31 +309,10 @@ class _StockItemDisplayState extends RefreshableState { } } - List> _labels = []; - bool allowLabelPrinting = await InvenTreeSettingsManager().getBool( + allowLabelPrinting = await InvenTreeSettingsManager().getBool( INV_ENABLE_LABEL_PRINTING, true, ); - allowLabelPrinting &= api.supportsMixin("labels"); - - // Request information on labels available for this stock item - if (allowLabelPrinting) { - String model_type = api.supportsModernLabelPrinting - ? InvenTreeStockItem.MODEL_TYPE - : "stock"; - String item_key = api.supportsModernLabelPrinting ? "items" : "item"; - - // Clear the existing labels list - _labels = await getLabelTemplates(model_type, { - item_key: widget.item.pk.toString(), - }); - } - - if (mounted) { - setState(() { - labels = _labels; - }); - } } /// Delete the stock item from the database From 01ac0fc59e2c6ba58cbcbee5992aeade9ed621cf Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 22 Nov 2025 07:26:55 +1100 Subject: [PATCH 27/40] New Crowdin updates (#727) * New translations app_en.arb (German) * New translations app_en.arb (Vietnamese) * New translations app_en.arb (Greek) --- lib/l10n/de_DE/app_de_DE.arb | 4 +- lib/l10n/el_GR/app_el_GR.arb | 1050 +++++++++++++++++----------------- lib/l10n/vi_VN/app_vi_VN.arb | 4 +- 3 files changed, 529 insertions(+), 529 deletions(-) diff --git a/lib/l10n/de_DE/app_de_DE.arb b/lib/l10n/de_DE/app_de_DE.arb index c92af223..e1c3fd6e 100644 --- a/lib/l10n/de_DE/app_de_DE.arb +++ b/lib/l10n/de_DE/app_de_DE.arb @@ -936,7 +936,7 @@ "@serverNotConnected": {}, "serverNotSelected": "Server nicht ausgewählt", "@serverNotSelected": {}, - "shipment": "Sendung", + "shipment": "Lieferung", "@shipment": {}, "shipments": "Lieferungen", "@shipments": {}, @@ -956,7 +956,7 @@ "@shipmentEdit": {}, "shipmentReference": "Shipment Reference", "@shipmentReference": {}, - "shipmentSend": "Send Shipment", + "shipmentSend": "Lieferung versenden", "@shipmentSend": {}, "shipmentUncheck": "Uncheck Shipment", "@shipmentUncheck": {}, diff --git a/lib/l10n/el_GR/app_el_GR.arb b/lib/l10n/el_GR/app_el_GR.arb index 243b8e5f..e254be3f 100644 --- a/lib/l10n/el_GR/app_el_GR.arb +++ b/lib/l10n/el_GR/app_el_GR.arb @@ -30,9 +30,9 @@ "@address": {}, "appAbout": "Σχετικά με το InvenTree", "@appAbout": {}, - "appCredits": "Πρόσθετες μονάδες εφαρμογής", + "appCredits": "Πιστώσεις Εφαρμογής", "@appCredits": {}, - "appDetails": "Λεπτομέρειες εφαρμογής", + "appDetails": "Λεπτομέρειες Εφαρμογής", "@appDetails": {}, "allocated": "Κατανεμημένο", "@allocated": {}, @@ -42,11 +42,11 @@ "@aspectRatio3x2": {}, "aspectRatio4x3": "4:3", "@aspectRatio4x3": {}, - "aspectRatioSquare": "Square (1:1)", + "aspectRatioSquare": "Τετράγωνο (1:1)", "@aspectRatioSquare": {}, "allocateStock": "Κατανομή Αποθέματος", "@allocateStock": {}, - "allocatedStock": "Allocated Stock", + "allocatedStock": "Κατανεμημένο Απόθεμα", "@allocatedStock": {}, "appReleaseNotes": "Προβολή πληροφοριών έκδοσης εφαρμογής", "@appReleaseNotes": {}, @@ -54,9 +54,9 @@ "@appSettings": {}, "appSettingsDetails": "Διαμόρφωση ρυθμίσεων της εφαρμογής InvenTree", "@appSettingsDetails": {}, - "assignedToMe": "Assigned to Me", + "assignedToMe": "Ανατεθειμένα σε εμένα", "@assignedToMe": {}, - "assignedToMeDetail": "Show orders which are assigned to me", + "assignedToMeDetail": "Προβολή παραγγελιών που έχουν ανατεθεί σε εμένα", "@assignedToMeDetail": {}, "attachments": "Συνημμένα", "@attachments": {}, @@ -64,7 +64,7 @@ "@attachImage": { "description": "Attach an image" }, - "attachmentNone": "Δε βρέθηκαν συνημμένα", + "attachmentNone": "Δεν βρέθηκαν συνημμένα", "@attachmentNone": {}, "attachmentNoneDetail": "Δεν βρέθηκαν συνημμένα", "@attachmentNoneDetail": {}, @@ -84,17 +84,17 @@ "@barcodeAssign": {}, "barcodeAssignDetail": "Σαρώστε προσαρμοσμένο barcode για ανάθεση", "@barcodeAssignDetail": {}, - "barcodeAssigned": "Το Βarcode καταχωρήθηκε", + "barcodeAssigned": "Το barcode καταχωρήθηκε", "@barcodeAssigned": {}, "barcodeError": "Σφάλμα σάρωσης Barcode", "@barcodeError": {}, "barcodeInUse": "Το Barcode έχει ήδη ανατεθεί", "@barcodeInUse": {}, - "barcodeMissingHash": "Λείπουν δεδομένα κατακερματισμού Barcode από την απόκριση", + "barcodeMissingHash": "Λείπουν δεδομένα κατακερματισμού barcode από την απόκριση", "@barcodeMissingHash": {}, "barcodeNoMatch": "Δεν υπάρχει αντιστοιχία με το barcode", "@barcodeNoMatch": {}, - "barcodeNotAssigned": "Το Βarcode δεν καταχωρήθηκε", + "barcodeNotAssigned": "Το barcode δεν καταχωρήθηκε", "@barcodeNotAssigned": {}, "barcodeScanPart": "Σάρωση barcode εξαρτήματος", "@barcodeScanPart": {}, @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Παύση σάρωσης barcode", "@barodeScanPaused": {}, - "barcodeScanPause": "Πατήστε ή κρατήστε πατημένο για να κάνετε παύση σάρωσης", + "barcodeScanPause": "Πατήστε ή κρατήστε πατημένο για παύση σάρωσης", "@barcodeScanPause": {}, "barcodeScanAssign": "Σάρωση για εκχώρηση barcode", "@barcodeScanAssign": {}, @@ -110,1094 +110,1094 @@ "@barcodeScanController": {}, "barcodeScanControllerDetail": "Επιλέξτε πηγή εισόδου για σαρωτή barcode", "@barcodeScanControllerDetail": {}, - "barcodeScanDelay": "Barcode Scan Delay", + "barcodeScanDelay": "Καθυστέρηση Σάρωσης Barcode", "@barcodeScanDelay": {}, - "barcodeScanDelayDetail": "Delay between barcode scans", + "barcodeScanDelayDetail": "Καθυστέρηση μεταξύ σαρώσεων barcode", "@barcodeScanDelayDetail": {}, - "barcodeScanGeneral": "Scan an InvenTree barcode", + "barcodeScanGeneral": "Σάρωση InvenTree barcode", "@barcodeScanGeneral": {}, - "barcodeScanInItems": "Scan stock items into this location", + "barcodeScanInItems": "Σάρωση αντικειμένων σε αυτήν την τοποθεσία", "@barcodeScanInItems": {}, - "barcodeScanLocation": "Scan stock location", + "barcodeScanLocation": "Σάρωση τοποθεσίας αποθέματος", "@barcodeScanLocation": {}, - "barcodeScanSingle": "Single Scan Mode", + "barcodeScanSingle": "Λειτουργία Μονής Σάρωσης", "@barcodeScanSingle": {}, - "barcodeScanSingleDetail": "Pause barcode scanner after each scan", + "barcodeScanSingleDetail": "Παύση του σαρωτή μετά από κάθε σάρωση", "@barcodeScanSingleDetail": {}, - "barcodeScanIntoLocationSuccess": "Scanned into location", + "barcodeScanIntoLocationSuccess": "Σαρώθηκε στην τοποθεσία", "@barcodeScanIntoLocationSuccess": {}, - "barcodeScanIntoLocationFailure": "Item not scanned in", + "barcodeScanIntoLocationFailure": "Το αντικείμενο δεν σαρώθηκε", "@barcodeScanIntoLocationFailure": {}, - "barcodeScanItem": "Scan stock item", + "barcodeScanItem": "Σάρωση αντικειμένου αποθέματος", "@barcodeScanItem": {}, - "barcodeTones": "Barcode Tones", + "barcodeTones": "Ήχοι Barcode", "@barcodeTones": {}, - "barcodeUnassign": "Unassign Barcode", + "barcodeUnassign": "Αφαίρεση Ανάθεσης Barcode", "@barcodeUnassign": {}, - "barcodeUnknown": "Barcode is not recognized", + "barcodeUnknown": "Το barcode δεν αναγνωρίζεται", "@barcodeUnknown": {}, - "batchCode": "Batch Code", + "batchCode": "Κωδικός Παρτίδας", "@batchCode": {}, - "billOfMaterials": "Bill of Materials", + "billOfMaterials": "Κατάσταση Υλικών", "@billOfMaterials": {}, "bom": "BOM", "@bom": {}, - "bomEnable": "Display Bill of Materials", + "bomEnable": "Εμφάνιση Κατάστασης Υλικών", "@bomEnable": {}, - "build": "Build", + "build": "Κατασκευή", "@build": {}, - "building": "Building", + "building": "Κατασκευάζεται", "@building": {}, - "cameraCreationError": "Could not open camera controller", + "cameraCreationError": "Αδυναμία ανοίγματος κάμερας", "@cameraCreationError": {}, - "cameraInternal": "Internal Camera", + "cameraInternal": "Εσωτερική Κάμερα", "@cameraInternal": {}, - "cameraInternalDetail": "Use internal camera to read barcodes", + "cameraInternalDetail": "Χρήση εσωτερικής κάμερας για ανάγνωση barcodes", "@cameraInternalDetail": {}, - "cancel": "Cancel", + "cancel": "Ακύρωση", "@cancel": { "description": "Cancel" }, - "cancelOrder": "Cancel Order", + "cancelOrder": "Ακύρωση Παραγγελίας", "@cancelOrder": {}, - "category": "Category", + "category": "Κατηγορία", "@category": {}, "categoryCreate": "Νέα Κατηγορία", "@categoryCreate": {}, - "categoryCreateDetail": "Create new part category", + "categoryCreateDetail": "Δημιουργία νέας κατηγορίας εξαρτημάτων", "@categoryCreateDetail": {}, - "categoryUpdated": "Part category updated", + "categoryUpdated": "Η κατηγορία ενημερώθηκε", "@categoryUpdated": {}, - "company": "Company", + "company": "Εταιρεία", "@company": {}, - "companyAdd": "Add Company", + "companyAdd": "Προσθήκη Εταιρείας", "@companyAdd": {}, - "companyEdit": "Edit Company", + "companyEdit": "Επεξεργασία Εταιρείας", "@companyEdit": {}, - "companyNoResults": "No companies matching query", + "companyNoResults": "Καμία εταιρεία δεν ταιριάζει με την αναζήτηση", "@companyNoResults": {}, - "companyUpdated": "Company details updated", + "companyUpdated": "Τα στοιχεία της εταιρείας ενημερώθηκαν", "@companyUpdated": {}, - "companies": "Companies", + "companies": "Εταιρείες", "@companies": {}, - "complete": "Complete", + "complete": "Ολοκλήρωση", "@complete": {}, - "completeOrder": "Complete Order", + "completeOrder": "Ολοκλήρωση Παραγγελίας", "@completeOrder": {}, - "completionDate": "Completion Date", + "completionDate": "Ημερομηνία Ολοκλήρωσης", "@completionDate": {}, - "configureServer": "Configure server settings", + "configureServer": "Ρύθμιση παραμέτρων διακομιστή", "@configureServer": {}, - "confirmScan": "Confirm Transfer", + "confirmScan": "Επιβεβαίωση Μεταφοράς", "@confirmScan": {}, - "confirmScanDetail": "Confirm stock transfer details when scanning barcodes", + "confirmScanDetail": "Επιβεβαίωση λεπτομερειών μεταφοράς κατά τη σάρωση barcodes", "@confirmScanDetail": {}, - "connectionRefused": "Connection Refused", + "connectionRefused": "Η σύνδεση απορρίφθηκε", "@connectionRefused": {}, - "count": "Count", + "count": "Μέτρηση", "@count": { "description": "Count" }, - "countStock": "Count Stock", + "countStock": "Καταμέτρηση Αποθέματος", "@countStock": { "description": "Count Stock" }, - "credits": "Credits", + "credits": "Πιστώσεις", "@credits": {}, - "crop": "Crop", + "crop": "Περικοπή", "@crop": {}, - "cropImage": "Crop Image", + "cropImage": "Περικοπή Εικόνας", "@cropImage": {}, - "customer": "Customer", + "customer": "Πελάτης", "@customer": {}, - "customers": "Customers", + "customers": "Πελάτες", "@customers": {}, - "customerReference": "Customer Reference", + "customerReference": "Αναφορά Πελάτη", "@customerReference": {}, - "damaged": "Damaged", + "damaged": "Κατεστραμμένο", "@damaged": {}, - "colorScheme": "Color Scheme", + "colorScheme": "Συνδυασμός Χρωμάτων", "@colorScheme": {}, - "colorSchemeDetail": "Select color scheme", + "colorSchemeDetail": "Επιλογή συνδυασμού χρωμάτων", "@colorSchemeDetail": {}, - "darkMode": "Dark Mode", + "darkMode": "Σκουρόχρωμη Λειτουργία", "@darkMode": {}, - "darkModeEnable": "Enable dark mode", + "darkModeEnable": "Ενεργοποίηση σκοτεινής λειτουργίας", "@darkModeEnable": {}, - "delete": "Delete", + "delete": "Διαγραφή", "@delete": {}, - "deleteFailed": "Delete operation failed", + "deleteFailed": "Η διαγραφή απέτυχε", "@deleteFailed": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", + "deleteImageConfirmation": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτή την εικόνα;", "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", + "deleteImageTooltip": "Διαγραφή Εικόνας", "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", + "deleteImage": "Διαγραφή Εικόνας", "@deleteImage": {}, - "deletePart": "Delete Part", + "deletePart": "Διαγραφή Εξαρτήματος", "@deletePart": {}, - "deletePartDetail": "Remove this part from the database", + "deletePartDetail": "Αφαίρεση αυτού του εξαρτήματος από τη βάση δεδομένων", "@deletePartDetail": {}, - "deleteSuccess": "Delete operation successful", + "deleteSuccess": "Η διαγραφή ολοκληρώθηκε με επιτυχία", "@deleteSuccess": {}, - "deliveryDate": "Delivery Date", + "deliveryDate": "Ημερομηνία Παράδοσης", "@deliveryDate": {}, - "description": "Description", + "description": "Περιγραφή", "@description": {}, - "destination": "Destination", + "destination": "Προορισμός", "@destination": {}, - "destroyed": "Destroyed", + "destroyed": "Καταστράφηκε", "@destroyed": {}, - "details": "Details", + "details": "Λεπτομέρειες", "@details": { "description": "details" }, - "documentation": "Documentation", + "documentation": "Τεκμηρίωση", "@documentation": {}, - "downloadComplete": "Download Complete", + "downloadComplete": "Η λήψη ολοκληρώθηκε", "@downloadComplete": {}, - "downloadError": "Error downloading image", + "downloadError": "Σφάλμα κατά τη λήψη της εικόνας", "@downloadError": {}, - "downloading": "Downloading File", + "downloading": "Λήψη Αρχείου", "@downloading": {}, - "edit": "Edit", + "edit": "Επεξεργασία", "@edit": { "description": "edit" }, - "editAttachment": "Edit Attachment", + "editAttachment": "Επεξεργασία Συνημμένου", "@editAttachment": {}, - "editCategory": "Edit Category", + "editCategory": "Επεξεργασία Κατηγορίας", "@editCategory": {}, - "editLocation": "Edit Location", + "editLocation": "Επεξεργασία Τοποθεσίας", "@editLocation": {}, - "editNotes": "Edit Notes", + "editNotes": "Επεξεργασία Σημειώσεων", "@editNotes": {}, - "editParameter": "Edit Parameter", + "editParameter": "Επεξεργασία Παραμέτρου", "@editParameter": {}, - "editPart": "Edit Part", + "editPart": "Επεξεργασία Εξαρτήματος", "@editPart": { "description": "edit part" }, - "editItem": "Edit Stock Item", + "editItem": "Επεξεργασία Αντικειμένου Αποθέματος", "@editItem": {}, - "editLineItem": "Edit Line Item", + "editLineItem": "Επεξεργασία Γραμμής", "@editLineItem": {}, "email": "Email", "@email": {}, - "enterPassword": "Enter password", + "enterPassword": "Εισαγάγετε τον κωδικό", "@enterPassword": {}, - "enterUsername": "Enter username", + "enterUsername": "Εισαγάγετε το όνομα χρήστη", "@enterUsername": {}, - "error": "Error", + "error": "Σφάλμα", "@error": { "description": "Error" }, - "errorCreate": "Error creating database entry", + "errorCreate": "Σφάλμα κατά τη δημιουργία εγγραφής", "@errorCreate": {}, - "errorDelete": "Error deleting database entry", + "errorDelete": "Σφάλμα κατά τη διαγραφή εγγραφής", "@errorDelete": {}, - "errorDetails": "Error Details", + "errorDetails": "Λεπτομέρειες Σφάλματος", "@errorDetails": {}, - "errorFetch": "Error fetching data from server", + "errorFetch": "Σφάλμα κατά την ανάκτηση δεδομένων από τον διακομιστή", "@errorFetch": {}, - "errorUserRoles": "Error requesting user roles from server", + "errorUserRoles": "Σφάλμα κατά το αίτημα ρόλων χρήστη", "@errorUserRoles": {}, - "errorPluginInfo": "Error requesting plugin data from server", + "errorPluginInfo": "Σφάλμα κατά το αίτημα πληροφοριών plugin", "@errorPluginInfo": {}, - "errorReporting": "Error Reporting", + "errorReporting": "Αναφορά Σφαλμάτων", "@errorReporting": {}, - "errorReportUpload": "Upload Error Reports", + "errorReportUpload": "Ανέβασμα Αναφορών Σφαλμάτων", "@errorReportUpload": {}, - "errorReportUploadDetails": "Upload anonymous error reports and crash logs", + "errorReportUploadDetails": "Ανώνυμη αποστολή αναφορών σφαλμάτων και καταγραφών κρασαρισμάτων", "@errorReportUploadDetails": {}, - "expiryDate": "Expiry Date", + "expiryDate": "Ημερομηνία Λήξης", "@expiryDate": {}, - "expiryExpired": "Expired", + "expiryExpired": "Έχει λήξει", "@expiryExpired": {}, - "expiryStale": "Stale", + "expiryStale": "Παλαιό", "@expiryStale": {}, - "extraLineItem": "Extra Line Item", + "extraLineItem": "Επιπλέον Γραμμή", "@extraLineItem": {}, - "extraLineItems": "Extra Line Items", + "extraLineItems": "Επιπλέον Γραμμές", "@extraLineItems": {}, - "feedback": "Feedback", + "feedback": "Ανατροφοδότηση", "@feedback": {}, - "feedbackError": "Error submitting feedback", + "feedbackError": "Σφάλμα κατά την αποστολή ανατροφοδότησης", "@feedbackError": {}, - "feedbackSuccess": "Feedback submitted", + "feedbackSuccess": "Η ανατροφοδότηση στάλθηκε", "@feedbackSuccess": {}, - "filterActive": "Active", + "filterActive": "Ενεργά", "@filterActive": {}, - "filterActiveDetail": "Show active parts", + "filterActiveDetail": "Εμφάνιση ενεργών εξαρτημάτων", "@filterActiveDetail": {}, - "filterAssembly": "Assembled", + "filterAssembly": "Συναρμολογημένα", "@filterAssembly": {}, - "filterAssemblyDetail": "Show assembled parts", + "filterAssemblyDetail": "Εμφάνιση συναρμολογημένων εξαρτημάτων", "@filterAssemblyDetail": {}, - "filterComponent": "Component", + "filterComponent": "Εξάρτημα", "@filterComponent": {}, - "filterComponentDetail": "Show component parts", + "filterComponentDetail": "Εμφάνιση εξαρτημάτων", "@filterComponentDetail": {}, - "filterExternal": "External", + "filterExternal": "Εξωτερικά", "@filterExternal": {}, - "filterExternalDetail": "Show stock in external locations", + "filterExternalDetail": "Εμφάνιση αποθέματος σε εξωτερικές τοποθεσίες", "@filterExternalDetail": {}, - "filterInStock": "In Stock", + "filterInStock": "Σε Απόθεμα", "@filterInStock": {}, - "filterInStockDetail": "Show parts which have stock", + "filterInStockDetail": "Εμφάνιση εξαρτημάτων που έχουν απόθεμα", "@filterInStockDetail": {}, - "filterSerialized": "Serialized", + "filterSerialized": "Με Σειριακό Αριθμό", "@filterSerialized": {}, - "filterSerializedDetail": "Show serialized stock items", + "filterSerializedDetail": "Εμφάνιση αντικειμένων αποθέματος με σειριακό αριθμό", "@filterSerializedDetail": {}, - "filterTemplate": "Template", + "filterTemplate": "Πρότυπο", "@filterTemplate": {}, - "filterTemplateDetail": "Show template parts", + "filterTemplateDetail": "Εμφάνιση πρότυπων εξαρτημάτων", "@filterTemplateDetail": {}, - "filterTrackable": "Trackable", + "filterTrackable": "Ιχνηλάσιμο", "@filterTrackable": {}, - "filterTrackableDetail": "Show trackable parts", + "filterTrackableDetail": "Εμφάνιση ιχνηλάσιμων εξαρτημάτων", "@filterTrackableDetail": {}, - "filterVirtual": "Virtual", + "filterVirtual": "Εικονικά", "@filterVirtual": {}, - "filterVirtualDetail": "Show virtual parts", + "filterVirtualDetail": "Εμφάνιση εικονικών εξαρτημάτων", "@filterVirtualDetail": {}, - "filteringOptions": "Filtering Options", + "filteringOptions": "Επιλογές Φιλτραρίσματος", "@filteringOptions": {}, - "formatException": "Format Exception", + "formatException": "Εξαίρεση Μορφοποίησης", "@formatException": {}, - "formatExceptionJson": "JSON data format exception", + "formatExceptionJson": "Εξαίρεση μορφής JSON", "@formatExceptionJson": {}, - "formError": "Form Error", + "formError": "Σφάλμα Φόρμας", "@formError": {}, - "history": "History", + "history": "Ιστορικό", "@history": { "description": "history" }, - "home": "Home", + "home": "Αρχική", "@home": {}, - "homeScreen": "Home Screen", + "homeScreen": "Αρχική Οθόνη", "@homeScreen": {}, - "homeScreenSettings": "Configure home screen settings", + "homeScreenSettings": "Ρύθμιση αρχικής οθόνης", "@homeScreenSettings": {}, - "homeShowPo": "Show Purchase Orders", + "homeShowPo": "Εμφάνιση Παραγγελιών Αγοράς", "@homeShowPo": {}, - "homeShowPoDescription": "Show purchase order button on home screen", + "homeShowPoDescription": "Εμφάνιση κουμπιού παραγγελιών αγοράς στην αρχική οθόνη", "@homeShowPoDescription": {}, - "homeShowShipments": "Show Shipments", + "homeShowShipments": "Εμφάνιση Αποστολών", "@homeShowShipments": {}, - "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "homeShowShipmentsDescription": "Εμφάνιση εκκρεμών αποστολών στην αρχική οθόνη", "@homeShowShipmentsDescription": {}, - "homeShowSo": "Show Sales Orders", + "homeShowSo": "Εμφάνιση Παραγγελιών Πώλησης", "@homeShowSo": {}, - "homeShowSoDescription": "Show sales order button on home screen", + "homeShowSoDescription": "Εμφάνιση κουμπιού παραγγελιών πώλησης στην αρχική οθόνη", "@homeShowSoDescription": {}, - "homeShowSubscribed": "Subscribed Parts", + "homeShowSubscribed": "Εγγεγραμμένα Εξαρτήματα", "@homeShowSubscribed": {}, - "homeShowSubscribedDescription": "Show subscribed parts on home screen", + "homeShowSubscribedDescription": "Εμφάνιση εγγεγραμμένων εξαρτημάτων στην αρχική οθόνη", "@homeShowSubscsribedDescription": {}, - "homeShowSuppliers": "Show Suppliers", + "homeShowSuppliers": "Εμφάνιση Προμηθευτών", "@homeShowSuppliers": {}, - "homeShowSuppliersDescription": "Show suppliers button on home screen", + "homeShowSuppliersDescription": "Εμφάνιση κουμπιού προμηθευτών στην αρχική οθόνη", "@homeShowSupplierDescription": {}, - "homeShowManufacturers": "Show Manufacturers", + "homeShowManufacturers": "Εμφάνιση Κατασκευαστών", "@homeShowManufacturers": {}, - "homeShowManufacturersDescription": "Show manufacturers button on home screen", + "homeShowManufacturersDescription": "Εμφάνιση κουμπιού κατασκευαστών στην αρχική οθόνη", "@homeShowManufacturersDescription": {}, - "homeShowCustomers": "Show Customers", + "homeShowCustomers": "Εμφάνιση Πελατών", "@homeShowCustomers": {}, - "homeShowCustomersDescription": "Show customers button on home screen", + "homeShowCustomersDescription": "Εμφάνιση κουμπιού πελατών στην αρχική οθόνη", "@homeShowCustomersDescription": {}, - "imageUploadFailure": "Image upload failed", + "imageUploadFailure": "Αποτυχία μεταφόρτωσης εικόνας", "@imageUploadFailure": {}, - "imageUploadSuccess": "Image uploaded", + "imageUploadSuccess": "Η εικόνα μεταφορτώθηκε", "@imageUploadSuccess": {}, - "inactive": "Inactive", + "inactive": "Ανενεργό", "@inactive": {}, - "inactiveCompany": "This company is marked as inactive", + "inactiveCompany": "Αυτή η εταιρεία έχει επισημανθεί ως ανενεργή", "@inactiveCompany": {}, - "inactiveDetail": "This part is marked as inactive", + "inactiveDetail": "Αυτό το εξάρτημα έχει επισημανθεί ως ανενεργό", "@inactiveDetail": {}, - "includeSubcategories": "Include Subcategories", + "includeSubcategories": "Συμπερίληψη Υποκατηγοριών", "@includeSubcategories": {}, - "includeSubcategoriesDetail": "Show results from subcategories", + "includeSubcategoriesDetail": "Εμφάνιση αποτελεσμάτων από υποκατηγορίες", "@includeSubcategoriesDetail": {}, - "includeSublocations": "Include Sublocations", + "includeSublocations": "Συμπερίληψη Υποτοποθεσιών", "@includeSublocations": {}, - "includeSublocationsDetail": "Show results from sublocations", + "includeSublocationsDetail": "Εμφάνιση αποτελεσμάτων από υποτοποθεσίες", "@includeSublocationsDetail": {}, - "incompleteDetails": "Incomplete profile details", + "incompleteDetails": "Ελλιπείς λεπτομέρειες προφίλ", "@incompleteDetails": {}, - "internalPartNumber": "Internal Part Number", + "internalPartNumber": "Εσωτερικός Κωδικός Εξαρτήματος", "@internalPartNumber": {}, - "info": "Info", + "info": "Πληροφορίες", "@info": {}, - "inProduction": "In Production", + "inProduction": "Σε Παραγωγή", "@inProduction": {}, - "inProductionDetail": "This stock item is in production", + "inProductionDetail": "Αυτό το αντικείμενο αποθέματος βρίσκεται σε παραγωγή", "@inProductionDetail": {}, - "internalPart": "Internal Part", + "internalPart": "Εσωτερικό Εξάρτημα", "@internalPart": {}, - "invalidHost": "Invalid hostname", + "invalidHost": "Μη έγκυρο hostname", "@invalidHost": {}, - "invalidHostDetails": "Provided hostname is not valid", + "invalidHostDetails": "Το παρεχόμενο hostname δεν είναι έγκυρο", "@invalidHostDetails": {}, - "invalidPart": "Invalid Part", + "invalidPart": "Μη έγκυρο Εξάρτημα", "@invalidPart": {}, - "invalidPartCategory": "Invalid Part Category", + "invalidPartCategory": "Μη έγκυρη Κατηγορία Εξαρτήματος", "@invalidPartCategory": {}, - "invalidStockLocation": "Invalid Stock Location", + "invalidStockLocation": "Μη έγκυρη Τοποθεσία Αποθέματος", "@invalidStockLocation": {}, - "invalidStockItem": "Invalid Stock Item", + "invalidStockItem": "Μη έγκυρο Αντικείμενο Αποθέματος", "@invalidStockItem": {}, - "invalidSupplierPart": "Invalid Supplier Part", + "invalidSupplierPart": "Μη έγκυρο Εξάρτημα Προμηθευτή", "@invalidSupplierPart": {}, - "invalidUsernamePassword": "Invalid username / password combination", + "invalidUsernamePassword": "Μη έγκυρος συνδυασμός ονόματος χρήστη / κωδικού", "@invalidUsernamePassword": {}, - "invoice": "Invoice", + "invoice": "Τιμολόγιο", "@invoice": {}, - "invoiceNumber": "Invoice Number", + "invoiceNumber": "Αριθμός Τιμολογίου", "@invoiceNumber": {}, - "issue": "Issue", + "issue": "Έκδοση", "@issue": {}, - "issueDate": "Issue Date", + "issueDate": "Ημερομηνία Έκδοσης", "@issueDate": {}, - "issueOrder": "Issue Order", + "issueOrder": "Έκδοση Παραγγελίας", "@issueOrder": {}, - "itemInLocation": "Item already in location", + "itemInLocation": "Το αντικείμενο βρίσκεται ήδη στην τοποθεσία", "@itemInLocation": {}, - "itemDeleted": "Item has been removed", + "itemDeleted": "Το αντικείμενο αφαιρέθηκε", "@itemDeleted": {}, - "itemUpdated": "Item updated", + "itemUpdated": "Το αντικείμενο ενημερώθηκε", "@itemUpdated": {}, - "keywords": "Keywords", + "keywords": "Λέξεις-Κλειδιά", "@keywords": {}, - "labelPrinting": "Label Printing", + "labelPrinting": "Εκτύπωση Ετικετών", "@labelPrinting": {}, - "labelPrintingDetail": "Enable label printing", + "labelPrintingDetail": "Ενεργοποίηση εκτύπωσης ετικετών", "@labelPrintingDetail": {}, - "labelTemplate": "Label Template", + "labelTemplate": "Πρότυπο Ετικέτας", "@labelTemplate": {}, - "labelSelectTemplate": "Select Label Template", + "labelSelectTemplate": "Επιλογή Προτύπου Ετικέτας", "@labelSelectTemplate": {}, - "labelSelectPrinter": "Select Label Printer", + "labelSelectPrinter": "Επιλογή Εκτυπωτή Ετικετών", "@labelSelectPrinter": {}, - "language": "Language", + "language": "Γλώσσα", "@language": {}, - "languageDefault": "Default system language", + "languageDefault": "Προεπιλεγμένη γλώσσα συστήματος", "@languageDefault": {}, - "languageSelect": "Select Language", + "languageSelect": "Επιλογή Γλώσσας", "@languageSelect": {}, - "lastStocktake": "Last Stocktake", + "lastStocktake": "Τελευταία Απογραφή", "@lastStocktake": {}, - "lastUpdated": "Last Updated", + "lastUpdated": "Τελευταία Ενημέρωση", "@lastUpdated": {}, - "level": "Level", + "level": "Επίπεδο", "@level": {}, - "lineItemAdd": "Add Line Item", + "lineItemAdd": "Προσθήκη Γραμμής", "@lineItemAdd": {}, - "lineItem": "Line Item", + "lineItem": "Γραμμή", "@lineItem": {}, - "lineItems": "Line Items", + "lineItems": "Γραμμές", "@lineItems": {}, - "lineItemUpdated": "Line item updated", + "lineItemUpdated": "Η γραμμή ενημερώθηκε", "@lineItemUpdated": {}, - "locateItem": "Locate stock item", + "locateItem": "Εντοπισμός αντικειμένου αποθέματος", "@locateItem": {}, - "locateLocation": "Locate stock location", + "locateLocation": "Εντοπισμός τοποθεσίας αποθέματος", "@locateLocation": {}, - "locationCreate": "New Location", + "locationCreate": "Νέα Τοποθεσία", "@locationCreate": {}, - "locationCreateDetail": "Create new stock location", + "locationCreateDetail": "Δημιουργία νέας τοποθεσίας αποθέματος", "@locationCreateDetail": {}, - "locationDefault": "Default Location", + "locationDefault": "Προεπιλεγμένη Τοποθεσία", "@locationDefault": {}, - "locationNotSet": "No location specified", + "locationNotSet": "Δεν έχει οριστεί τοποθεσία", "@locationNotSet": {}, - "locationUpdated": "Stock location updated", + "locationUpdated": "Η τοποθεσία ενημερώθηκε", "@locationUpdated": {}, - "login": "Login", + "login": "Σύνδεση", "@login": {}, - "loginEnter": "Enter login details", + "loginEnter": "Εισαγάγετε τα στοιχεία σύνδεσης", "@loginEnter": {}, - "loginEnterDetails": "Username and password are not stored locally", + "loginEnterDetails": "Το όνομα χρήστη και ο κωδικός δεν αποθηκεύονται τοπικά", "@loginEnterDetails": {}, - "link": "Link", + "link": "Σύνδεσμος", "@link": {}, - "lost": "Lost", + "lost": "Χαμένο", "@lost": {}, - "manufacturerPart": "Manufacturer Part", + "manufacturerPart": "Κωδικός Κατασκευαστή", "@manufacturerPart": {}, - "manufacturerPartEdit": "Edit Manufacturer Part", + "manufacturerPartEdit": "Επεξεργασία Κωδικού Κατασκευαστή", "@manufacturerPartEdit": {}, - "manufacturerPartNumber": "Manufacturer Part Number", + "manufacturerPartNumber": "Αριθμός Κωδικού Κατασκευαστή", "@manufacturerPartNumber": {}, - "manufacturer": "Manufacturer", + "manufacturer": "Κατασκευαστής", "@manufacturer": {}, - "manufacturers": "Manufacturers", + "manufacturers": "Κατασκευαστές", "@manufacturers": {}, - "missingData": "Missing Data", + "missingData": "Ελλιπή Δεδομένα", "@missingData": {}, - "name": "Name", + "name": "Όνομα", "@name": {}, - "no": "No", + "no": "Όχι", "@no": {}, - "notApplicable": "N/A", + "notApplicable": "Μ/Δ", "@notApplicable": {}, - "notConnected": "Not Connected", + "notConnected": "Δεν υπάρχει σύνδεση", "@notConnected": {}, - "notes": "Notes", + "notes": "Σημειώσεις", "@notes": { "description": "Notes" }, - "notifications": "Notifications", + "notifications": "Ειδοποιήσεις", "@notifications": {}, - "notificationsEmpty": "No unread notifications", + "notificationsEmpty": "Καμία μη αναγνωσμένη ειδοποίηση", "@notificationsEmpty": {}, - "noResponse": "No Response from Server", + "noResponse": "Χωρίς απόκριση από τον διακομιστή", "@noResponse": {}, - "noResults": "No Results", + "noResults": "Κανένα αποτέλεσμα", "@noResults": {}, - "noImageAvailable": "No image available", + "noImageAvailable": "Δεν υπάρχει διαθέσιμη εικόνα", "@noImageAvailable": {}, - "noPricingAvailable": "No pricing available", + "noPricingAvailable": "Δεν υπάρχουν διαθέσιμες τιμές", "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", + "noPricingDataFound": "Δεν βρέθηκαν δεδομένα τιμολόγησης για αυτό το εξάρτημα", "@noPricingDataFound": {}, - "noSubcategories": "No Subcategories", + "noSubcategories": "Δεν υπάρχουν υποκατηγορίες", "@noSubcategories": {}, - "noSubcategoriesAvailable": "No subcategories available", + "noSubcategoriesAvailable": "Δεν υπάρχουν διαθέσιμες υποκατηγορίες", "@noSubcategoriesAvailable": {}, - "numberInvalid": "Invalid number", + "numberInvalid": "Μη έγκυρος αριθμός", "@numberInvalid": {}, - "onOrder": "On Order", + "onOrder": "Σε Παραγγελία", "@onOrder": {}, - "onOrderDetails": "Items currently on order", + "onOrderDetails": "Αντικείμενα που βρίσκονται σε παραγγελία", "@onOrderDetails": {}, - "orientation": "Screen Orientation", + "orientation": "Προσανατολισμός Οθόνης", "@orientation": {}, - "orientationDetail": "Screen orientation (requires restart)", + "orientationDetail": "Προσανατολισμός οθόνης (απαιτεί επανεκκίνηση)", "@orientationDetail": {}, - "orientationLandscape": "Landscape", + "orientationLandscape": "Οριζόντια", "@orientationLandscape": {}, - "orientationPortrait": "Portrait", + "orientationPortrait": "Κάθετη", "@orientationPortrait": {}, - "orientationSystem": "System", + "orientationSystem": "Σύστημα", "@orientationSystem": {}, - "outstanding": "Outstanding", + "outstanding": "Εκκρεμείς", "@outstanding": {}, - "outstandingOrderDetail": "Show outstanding orders", + "outstandingOrderDetail": "Εμφάνιση εκκρεμών παραγγελιών", "@outstandingOrderDetail": {}, - "overdue": "Overdue", + "overdue": "Καθυστερημένες", "@overdue": {}, - "overdueDetail": "Show overdue orders", + "overdueDetail": "Εμφάνιση καθυστερημένων παραγγελιών", "@overdueDetail": {}, - "packaging": "Packaging", + "packaging": "Συσκευασία", "@packaging": {}, - "packageName": "Package Name", + "packageName": "Όνομα Πακέτου", "@packageName": {}, - "parameters": "Parameters", + "parameters": "Παράμετροι", "@parameters": {}, - "parametersSettingDetail": "Display part parameters", + "parametersSettingDetail": "Εμφάνιση παραμέτρων εξαρτήματος", "@parametersSettingDetail": {}, - "parent": "Parent", + "parent": "Γονικό", "@parent": {}, - "parentCategory": "Parent Category", + "parentCategory": "Γονική Κατηγορία", "@parentCategory": {}, - "parentLocation": "Parent Location", + "parentLocation": "Γονική Τοποθεσία", "@parentLocation": {}, - "part": "Part", + "part": "Εξάρτημα", "@part": { "description": "Part (single)" }, - "partCreate": "New Part", + "partCreate": "Νέο Εξάρτημα", "@partCreate": {}, - "partCreateDetail": "Create new part in this category", + "partCreateDetail": "Δημιουργία νέου εξαρτήματος σε αυτή την κατηγορία", "@partCreateDetail": {}, - "partEdited": "Part updated", + "partEdited": "Το εξάρτημα ενημερώθηκε", "@partEdited": {}, - "parts": "Parts", + "parts": "Εξαρτήματα", "@parts": { "description": "Part (multiple)" }, - "partNotSalable": "Part not marked as salable", + "partNotSalable": "Το εξάρτημα δεν έχει χαρακτηριστεί ως διαθέσιμο προς πώληση", "@partNotSalable": {}, - "partsNone": "No Parts", + "partsNone": "Δεν υπάρχουν εξαρτήματα", "@partsNone": {}, - "partNoResults": "No parts matching query", + "partNoResults": "Κανένα εξάρτημα δεν ταιριάζει με την αναζήτηση", "@partNoResults": {}, - "partPricing": "Part Pricing", + "partPricing": "Τιμολόγηση Εξαρτήματος", "@partPricing": {}, - "partPricingSettingDetail": "Display part pricing information", + "partPricingSettingDetail": "Εμφάνιση πληροφοριών τιμολόγησης εξαρτήματος", "@pricingSettingDetail": {}, - "partSettings": "Part Settings", + "partSettings": "Ρυθμίσεις Εξαρτημάτων", "@partSettings": {}, - "partsStarred": "Subscribed Parts", + "partsStarred": "Εγγεγραμμένα Εξαρτήματα", "@partsStarred": {}, - "partsStarredNone": "No starred parts available", + "partsStarredNone": "Δεν υπάρχουν εγγεγραμμένα εξαρτήματα", "@partsStarredNone": {}, - "partSuppliers": "Part Suppliers", + "partSuppliers": "Προμηθευτές Εξαρτήματος", "@partSuppliers": {}, - "partCategory": "Part Category", + "partCategory": "Κατηγορία Εξαρτήματος", "@partCategory": {}, - "partCategoryTopLevel": "Top level part category", + "partCategoryTopLevel": "Κατηγορία εξαρτήματος ανώτερου επιπέδου", "@partCategoryTopLevel": {}, - "partCategories": "Part Categories", + "partCategories": "Κατηγορίες Εξαρτημάτων", "@partCategories": {}, - "partDetails": "Part Details", + "partDetails": "Λεπτομέρειες Εξαρτήματος", "@partDetails": {}, - "partNotes": "Part Notes", + "partNotes": "Σημειώσεις Εξαρτήματος", "@partNotes": {}, - "partStock": "Part Stock", + "partStock": "Απόθεμα Εξαρτήματος", "@partStock": { "description": "part stock" }, - "password": "Password", + "password": "Κωδικός", "@password": {}, - "passwordEmpty": "Password cannot be empty", + "passwordEmpty": "Ο κωδικός δεν μπορεί να είναι κενός", "@passwordEmpty": {}, - "pending": "Pending", + "pending": "Σε αναμονή", "@pending": {}, - "permissionAccountDenied": "Your account does not have the required permissions to perform this action", + "permissionAccountDenied": "Ο λογαριασμός σας δεν έχει τα απαραίτητα δικαιώματα για αυτή την ενέργεια", "@permissionAccountDenied": {}, - "permissionRequired": "Permission Required", + "permissionRequired": "Απαιτούνται Δικαιώματα", "@permissionRequired": {}, - "phone": "Phone", + "phone": "Τηλέφωνο", "@phone": {}, - "printLabel": "Print Label", + "printLabel": "Εκτύπωση Ετικέτας", "@printLabel": {}, - "plugin": "Plugin", + "plugin": "Πρόσθετο", "@plugin": {}, - "pluginPrinter": "Printer", + "pluginPrinter": "Εκτυπωτής", "@pluginPrinter": {}, - "pluginSupport": "Plugin Support Enabled", + "pluginSupport": "Υποστήριξη Plugin ενεργοποιημένη", "@pluginSupport": {}, - "pluginSupportDetail": "The server supports custom plugins", + "pluginSupportDetail": "Ο διακομιστής υποστηρίζει προσαρμοσμένα plugins", "@pluginSupportDetail": {}, - "printLabelFailure": "Label printing failed", + "printLabelFailure": "Η εκτύπωση ετικέτας απέτυχε", "@printLabelFailure": {}, - "printLabelSuccess": "Label sent to printer", + "printLabelSuccess": "Η ετικέτα στάλθηκε στον εκτυπωτή", "@printLabelSuccess": {}, - "profile": "Profile", + "profile": "Προφίλ", "@profile": {}, - "profileAdd": "Add Server Profile", + "profileAdd": "Προσθήκη Προφίλ Διακομιστή", "@profileAdd": {}, - "profileConnect": "Connect to Server", + "profileConnect": "Σύνδεση με Διακομιστή", "@profileConnect": {}, - "profileEdit": "Edit Server Profile", + "profileEdit": "Επεξεργασία Προφίλ Διακομιστή", "@profileEdit": {}, - "profileDelete": "Delete Server Profile", + "profileDelete": "Διαγραφή Προφίλ Διακομιστή", "@profileDelete": {}, - "profileLogout": "Logout Profile", + "profileLogout": "Αποσύνδεση Προφίλ", "@profileLogout": {}, - "profileName": "Profile Name", + "profileName": "Όνομα Προφίλ", "@profileName": {}, - "profileNone": "No profiles available", + "profileNone": "Δεν υπάρχουν διαθέσιμα προφίλ", "@profileNone": {}, - "profileNotSelected": "No Profile Selected", + "profileNotSelected": "Δεν επιλέχθηκε προφίλ", "@profileNotSelected": {}, - "profileSelect": "Select InvenTree Server", + "profileSelect": "Επιλογή Διακομιστή InvenTree", "@profileSelect": {}, - "profileSelectOrCreate": "Select server or create a new profile", + "profileSelectOrCreate": "Επιλέξτε διακομιστή ή δημιουργήστε νέο προφίλ", "@profileSelectOrCreate": {}, - "profileTapToCreate": "Tap to create or select a profile", + "profileTapToCreate": "Πατήστε για δημιουργία ή επιλογή προφίλ", "@profileTapToCreate": {}, - "projectCode": "Project Code", + "projectCode": "Κωδικός Έργου", "@projectCode": {}, - "purchaseOrderConfirmScan": "Confirm Scan Data", + "purchaseOrderConfirmScan": "Επιβεβαίωση Δεδομένων Σάρωσης", "@purchaseOrderConfirmScan": {}, - "purchaseOrderConfirmScanDetail": "Confirm details when scanning in items", + "purchaseOrderConfirmScanDetail": "Επιβεβαίωση λεπτομερειών κατά τη σάρωση αντικειμένων", "@purchaseOrderConfirmScanDetail": {}, - "purchaseOrderEnable": "Enable Purchase Orders", + "purchaseOrderEnable": "Ενεργοποίηση Παραγγελιών Αγοράς", "@purchaseOrderEnable": {}, - "purchaseOrderEnableDetail": "Enable purchase order functionality", + "purchaseOrderEnableDetail": "Ενεργοποίηση λειτουργιών παραγγελίας αγοράς", "@purchaseOrderEnableDetail": {}, - "purchaseOrderShowCamera": "Camera Shortcut", + "purchaseOrderShowCamera": "Συντόμευση Κάμερας", "@purchaseOrderShowCamera": {}, - "purchaseOrderShowCameraDetail": "Enable image upload shortcut on purchase order screen", + "purchaseOrderShowCameraDetail": "Ενεργοποίηση συντόμευσης μεταφόρτωσης εικόνων στην οθόνη παραγγελίας", "@purchaseOrderShowCameraDetail": {}, - "purchaseOrder": "Purchase Order", + "purchaseOrder": "Παραγγελία Αγοράς", "@purchaseOrder": {}, - "purchaseOrderCreate": "New Purchase Order", + "purchaseOrderCreate": "Νέα Παραγγελία Αγοράς", "@purchaseOrderCreate": {}, - "purchaseOrderEdit": "Edit Purchase Order", + "purchaseOrderEdit": "Επεξεργασία Παραγγελίας Αγοράς", "@purchaseOrderEdit": {}, - "purchaseOrderSettings": "Purchase order settings", + "purchaseOrderSettings": "Ρυθμίσεις Παραγγελιών Αγοράς", "@purchaseOrderSettings": {}, - "purchaseOrders": "Purchase Orders", + "purchaseOrders": "Παραγγελίες Αγοράς", "@purchaseOrders": {}, - "purchaseOrderUpdated": "Purchase order updated", + "purchaseOrderUpdated": "Η παραγγελία αγοράς ενημερώθηκε", "@purchaseOrderUpdated": {}, - "purchasePrice": "Purchase Price", + "purchasePrice": "Τιμή Αγοράς", "@purchasePrice": {}, - "quantity": "Quantity", + "quantity": "Ποσότητα", "@quantity": { "description": "Quantity" }, - "quantityAvailable": "Quantity Available", + "quantityAvailable": "Διαθέσιμη Ποσότητα", "@quantityAvailable": {}, - "quantityEmpty": "Quantity is empty", + "quantityEmpty": "Η ποσότητα είναι κενή", "@quantityEmpty": {}, - "quantityInvalid": "Quantity is invalid", + "quantityInvalid": "Η ποσότητα δεν είναι έγκυρη", "@quantityInvalid": {}, - "quantityPositive": "Quantity must be positive", + "quantityPositive": "Η ποσότητα πρέπει να είναι θετική", "@quantityPositive": {}, - "queryEmpty": "Enter search query", + "queryEmpty": "Εισαγάγετε αναζήτηση", "@queryEmpty": {}, - "queryNoResults": "No results for query", + "queryNoResults": "Δεν υπάρχουν αποτελέσματα για την αναζήτηση", "@queryNoResults": {}, - "received": "Received", + "received": "Παραλήφθηκε", "@received": {}, - "receivedFilterDetail": "Show received items", + "receivedFilterDetail": "Εμφάνιση παραληφθέντων αντικειμένων", "@receivedFilterDetail": {}, - "receiveItem": "Receive Item", + "receiveItem": "Παραλαβή Αντικειμένου", "@receiveItem": {}, - "receivedItem": "Received Stock Item", + "receivedItem": "Παραληφθέν Αντικείμενο Αποθέματος", "@receivedItem": {}, - "reference": "Reference", + "reference": "Αναφορά", "@reference": {}, - "refresh": "Refresh", + "refresh": "Ανανέωση", "@refresh": {}, - "rotateClockwise": "Rotate 90° clockwise", + "rotateClockwise": "Περιστροφή 90° δεξιόστροφα", "@rotateClockwise": {}, - "refreshing": "Refreshing", + "refreshing": "Γίνεται ανανέωση", "@refreshing": {}, - "rejected": "Rejected", + "rejected": "Απορρίφθηκε", "@rejected": {}, - "releaseNotes": "Release Notes", + "releaseNotes": "Σημειώσεις Έκδοσης", "@releaseNotes": {}, - "remove": "Remove", + "remove": "Αφαίρεση", "@remove": { "description": "remove" }, - "removeStock": "Remove Stock", + "removeStock": "Αφαίρεση Αποθέματος", "@removeStock": { "description": "remove stock" }, - "reportBug": "Report Bug", + "reportBug": "Αναφορά Σφάλματος", "@reportBug": {}, - "reportBugDescription": "Submit bug report (requires GitHub account)", + "reportBugDescription": "Υποβολή αναφοράς σφάλματος (απαιτεί λογαριασμό GitHub)", "@reportBugDescription": {}, - "responsible": "Responsible", + "responsible": "Υπεύθυνος", "@responsible": {}, - "results": "Results", + "results": "Αποτελέσματα", "@results": {}, - "request": "Request", + "request": "Αίτημα", "@request": {}, - "requestFailed": "Request Failed", + "requestFailed": "Η αίτηση απέτυχε", "@requestFailed": {}, - "requestSuccessful": "Request successful", + "requestSuccessful": "Η αίτηση ολοκληρώθηκε με επιτυχία", "@requestSuccessful": {}, - "requestingData": "Requesting Data", + "requestingData": "Ανάκτηση Δεδομένων", "@requestingData": {}, - "required": "Required", + "required": "Απαιτείται", "@required": { "description": "This field is required" }, - "response400": "Bad Request", + "response400": "Μη Έγκυρο Αίτημα", "@response400": {}, - "response401": "Unauthorized", + "response401": "Μη Εξουσιοδοτημένο", "@response401": {}, - "response403": "Permission Denied", + "response403": "Δεν Επιτρέπεται", "@response403": {}, - "response404": "Resource Not Found", + "response404": "Ο Πόρος Δεν Βρέθηκε", "@response404": {}, - "response405": "Method Not Allowed", + "response405": "Μη Επιτρεπτή Μέθοδος", "@response405": {}, - "response429": "Too Many Requests", + "response429": "Πάρα Πολλά Αιτήματα", "@response429": {}, - "response500": "Internal Server Error", + "response500": "Εσωτερικό Σφάλμα Διακομιστή", "@response500": {}, - "response501": "Not Implemented", + "response501": "Μη Υλοποιημένο", "@response501": {}, - "response502": "Bad Gateway", + "response502": "Εσφαλμένη Πύλη (Bad Gateway)", "@response502": {}, - "response503": "Service Unavailable", + "response503": "Υπηρεσία Μη Διαθέσιμη", "@response503": {}, - "response504": "Gateway Timeout", + "response504": "Λήξη Χρόνου Πύλης (Gateway Timeout)", "@response504": {}, - "response505": "HTTP Version Not Supported", + "response505": "Η Έκδοση HTTP Δεν Υποστηρίζεται", "@response505": {}, - "responseData": "Response data", + "responseData": "Δεδομένα Απόκρισης", "@responseData": {}, - "responseInvalid": "Invalid Response Code", + "responseInvalid": "Μη έγκυρος κωδικός απόκρισης", "@responseInvalid": {}, - "responseUnknown": "Unknown Response", + "responseUnknown": "Άγνωστη Απόκριση", "@responseUnknown": {}, - "result": "Result", + "result": "Αποτέλεσμα", "@result": { "description": "" }, - "returned": "Returned", + "returned": "Επιστράφηκε", "@returned": {}, - "salesOrder": "Sales Order", + "salesOrder": "Παραγγελία Πώλησης", "@salesOrder": {}, - "salesOrders": "Sales Orders", + "salesOrders": "Παραγγελίες Πώλησης", "@salesOrders": {}, - "salesOrderEnable": "Enable Sales Orders", + "salesOrderEnable": "Ενεργοποίηση Παραγγελιών Πώλησης", "@salesOrderEnable": {}, - "salesOrderEnableDetail": "Enable sales order functionality", + "salesOrderEnableDetail": "Ενεργοποίηση λειτουργιών παραγγελιών πώλησης", "@salesOrderEnableDetail": {}, - "salesOrderShowCamera": "Camera Shortcut", + "salesOrderShowCamera": "Συντόμευση Κάμερας", "@salesOrderShowCamera": {}, - "salesOrderShowCameraDetail": "Enable image upload shortcut on sales order screen", + "salesOrderShowCameraDetail": "Ενεργοποίηση συντόμευσης μεταφόρτωσης εικόνας στην οθόνη παραγγελίας πώλησης", "@salesOrderShowCameraDetail": {}, - "salesOrderSettings": "Sales order settings", + "salesOrderSettings": "Ρυθμίσεις Παραγγελιών Πώλησης", "@salesOrderSettings": {}, - "salesOrderCreate": "New Sales Order", + "salesOrderCreate": "Νέα Παραγγελία Πώλησης", "@saleOrderCreate": {}, - "salesOrderEdit": "Edit Sales Order", + "salesOrderEdit": "Επεξεργασία Παραγγελίας Πώλησης", "@salesOrderEdit": {}, - "salesOrderUpdated": "Sales order updated", + "salesOrderUpdated": "Η παραγγελία πώλησης ενημερώθηκε", "@salesOrderUpdated": {}, - "save": "Save", + "save": "Αποθήκευση", "@save": { "description": "Save" }, - "scanBarcode": "Scan Barcode", + "scanBarcode": "Σάρωση Barcode", "@scanBarcode": {}, - "scanSupplierPart": "Scan supplier part barcode", + "scanSupplierPart": "Σάρωση barcode εξαρτήματος προμηθευτή", "@scanSupplierPart": {}, - "scanIntoLocation": "Scan Into Location", + "scanIntoLocation": "Σάρωση σε Τοποθεσία", "@scanIntoLocation": {}, - "scanIntoLocationDetail": "Scan this item into location", + "scanIntoLocationDetail": "Σαρώστε αυτό το αντικείμενο στην τοποθεσία", "@scanIntoLocationDetail": {}, - "scannerExternal": "External Scanner", + "scannerExternal": "Εξωτερικός Σαρωτής", "@scannerExternal": {}, - "scannerExternalDetail": "Use external scanner to read barcodes (wedge mode)", + "scannerExternalDetail": "Χρήση εξωτερικού σαρωτή για ανάγνωση barcodes (wedge mode)", "@scannerExternalDetail": {}, - "scanReceivedParts": "Scan Received Parts", + "scanReceivedParts": "Σάρωση Παραληφθέντων Εξαρτημάτων", "@scanReceivedParts": {}, - "search": "Search", + "search": "Αναζήτηση", "@search": { "description": "search" }, - "searching": "Searching", + "searching": "Γίνεται αναζήτηση", "@searching": {}, - "searchLocation": "Search for location", + "searchLocation": "Αναζήτηση τοποθεσίας", "@searchLocation": {}, - "searchParts": "Search Parts", + "searchParts": "Αναζήτηση εξαρτημάτων", "@searchParts": {}, - "searchStock": "Search Stock", + "searchStock": "Αναζήτηση αποθέματος", "@searchStock": {}, - "select": "Select", + "select": "Επιλογή", "@select": {}, - "selectFile": "Select File", + "selectFile": "Επιλογή Αρχείου", "@selectFile": {}, - "selectImage": "Select Image", + "selectImage": "Επιλογή Εικόνας", "@selectImage": {}, - "selectLocation": "Select a location", + "selectLocation": "Επιλογή τοποθεσίας", "@selectLocation": {}, - "send": "Send", + "send": "Αποστολή", "@send": {}, - "serialNumber": "Serial Number", + "serialNumber": "Σειριακός Αριθμός", "@serialNumber": {}, - "serialNumbers": "Serial Numbers", + "serialNumbers": "Σειριακοί Αριθμοί", "@serialNumbers": {}, - "server": "Server", + "server": "Διακομιστής", "@server": {}, - "serverAddress": "Server Address", + "serverAddress": "Διεύθυνση Διακομιστή", "@serverAddress": {}, - "serverApiRequired": "Required API Version", + "serverApiRequired": "Απαιτούμενη Έκδοση API", "@serverApiRequired": {}, - "serverApiVersion": "Server API Version", + "serverApiVersion": "Έκδοση API Διακομιστή", "@serverApiVersion": {}, - "serverAuthenticationError": "Authentication Error", + "serverAuthenticationError": "Σφάλμα Πιστοποίησης", "@serverAuthenticationError": {}, - "serverCertificateError": "Cerficate Error", + "serverCertificateError": "Σφάλμα Πιστοποιητικού", "@serverCertificateError": {}, - "serverCertificateInvalid": "Server HTTPS certificate is invalid", + "serverCertificateInvalid": "Το πιστοποιητικό HTTPS του διακομιστή δεν είναι έγκυρο", "@serverCertificateInvalid": {}, - "serverConnected": "Connected to Server", + "serverConnected": "Συνδεδεμένο με τον Διακομιστή", "@serverConnected": {}, - "serverConnecting": "Connecting to server", + "serverConnecting": "Σύνδεση με τον διακομιστή", "@serverConnecting": {}, - "serverCouldNotConnect": "Could not connect to server", + "serverCouldNotConnect": "Αδυναμία σύνδεσης με τον διακομιστή", "@serverCouldNotConnect": {}, - "serverEmpty": "Server cannot be empty", + "serverEmpty": "Το πεδίο διακομιστή δεν μπορεί να είναι κενό", "@serverEmpty": {}, - "serverError": "Server Error", + "serverError": "Σφάλμα Διακομιστή", "@serverError": {}, - "serverDetails": "Server Details", + "serverDetails": "Λεπτομέρειες Διακομιστή", "@serverDetails": {}, - "serverMissingData": "Server response missing required fields", + "serverMissingData": "Η απόκριση του διακομιστή δεν περιέχει τα απαιτούμενα δεδομένα", "@serverMissingData": {}, - "serverOld": "Old Server Version", + "serverOld": "Παλιά Έκδοση Διακομιστή", "@serverOld": {}, - "serverSettings": "Server Settings", + "serverSettings": "Ρυθμίσεις Διακομιστή", "@serverSettings": {}, - "serverStart": "Server must start with http[s]", + "serverStart": "Ο διακομιστής πρέπει να ξεκινά με http[s]", "@serverStart": {}, - "settings": "Settings", + "settings": "Ρυθμίσεις", "@settings": {}, - "serverInstance": "Server Instance", + "serverInstance": "Περίπτωση Διακομιστή", "@serverInstance": {}, - "serverNotConnected": "Server not connected", + "serverNotConnected": "Δεν υπάρχει σύνδεση με τον διακομιστή", "@serverNotConnected": {}, - "serverNotSelected": "Server not selected", + "serverNotSelected": "Δεν έχει επιλεγεί διακομιστής", "@serverNotSelected": {}, - "shipment": "Shipment", + "shipment": "Αποστολή", "@shipment": {}, - "shipments": "Shipments", + "shipments": "Αποστολές", "@shipments": {}, - "shipmentsPending": "Pending Shipments", + "shipmentsPending": "Εκκρεμείς Αποστολές", "@shipmentsPending": {}, - "shipmentAdd": "Add Shipment", + "shipmentAdd": "Προσθήκη Αποστολής", "@shipmentAdd": {}, - "shipmentCheck": "Check Shipment", + "shipmentCheck": "Έλεγχος Αποστολής", "@shipmentCheck": {}, - "shipmentCheckDetail": "Mark this shipment as checked", + "shipmentCheckDetail": "Σημειώστε την αποστολή ως ελεγμένη", "@shipmentCheckDetail": {}, - "shipmentChecked": "Shipment Checked", + "shipmentChecked": "Η Αποστολή Ελέγχθηκε", "@shipmentChecked": {}, - "shipmentDate": "Shipment Date", + "shipmentDate": "Ημερομηνία Αποστολής", "@shipmentDate": {}, - "shipmentEdit": "Edit Shipment", + "shipmentEdit": "Επεξεργασία Αποστολής", "@shipmentEdit": {}, - "shipmentReference": "Shipment Reference", + "shipmentReference": "Αναφορά Αποστολής", "@shipmentReference": {}, - "shipmentSend": "Send Shipment", + "shipmentSend": "Αποστολή", "@shipmentSend": {}, - "shipmentUncheck": "Uncheck Shipment", + "shipmentUncheck": "Αναίρεση Ελέγχου Αποστολής", "@shipmentUncheck": {}, - "shipmentUncheckDetail": "Mark this shipment as unchecked", + "shipmentUncheckDetail": "Σημειώστε την αποστολή ως μη ελεγμένη", "@shipmentUncheckDetail": {}, - "shipmentUpdated": "Shipment Updated", + "shipmentUpdated": "Η Αποστολή Ενημερώθηκε", "@shipmentUpdated": {}, - "shipped": "Shipped", + "shipped": "Απεστάλη", "@shipped": {}, "sku": "SKU", "@sku": {}, - "sounds": "Sounds", + "sounds": "Ήχοι", "@sounds": {}, - "soundOnBarcodeAction": "Play audible tone on barcode action", + "soundOnBarcodeAction": "Αναπαραγωγή ήχου κατά τη δράση barcode", "@soundOnBarcodeAction": {}, - "soundOnServerError": "Play audible tone on server error", + "soundOnServerError": "Αναπαραγωγή ήχου σε σφάλμα διακομιστή", "@soundOnServerError": {}, - "startDate": "Start Date", + "startDate": "Ημερομηνία Έναρξης", "@startDate": {}, - "status": "Status", + "status": "Κατάσταση", "@status": {}, - "statusCode": "Status Code", + "statusCode": "Κωδικός Κατάστασης", "@statusCode": {}, - "stock": "Stock", + "stock": "Απόθεμα", "@stock": { "description": "stock" }, - "stockDetails": "Current available stock quantity", + "stockDetails": "Τρέχουσα διαθέσιμη ποσότητα αποθέματος", "@stockDetails": {}, - "stockItem": "Stock Item", + "stockItem": "Αντικείμενο Αποθέματος", "@stockItem": { "description": "stock item title" }, - "stockItems": "Stock Items", + "stockItems": "Αντικείμενα Αποθέματος", "@stockItems": {}, - "stockItemCreate": "New Stock Item", + "stockItemCreate": "Νέο Αντικείμενο Αποθέματος", "@stockItemCreate": {}, - "stockItemCreateDetail": "Create new stock item in this location", + "stockItemCreateDetail": "Δημιουργία νέου αντικειμένου αποθέματος σε αυτή την τοποθεσία", "@stockItemCreateDetail": {}, - "stockItemDelete": "Delete Stock Item", + "stockItemDelete": "Διαγραφή Αντικειμένου Αποθέματος", "@stockItemDelete": {}, - "stockItemDeleteConfirm": "Are you sure you want to delete this stock item?", + "stockItemDeleteConfirm": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το αντικείμενο αποθέματος;", "@stockItemDeleteConfirm": {}, - "stockItemDeleteFailure": "Could not delete stock item", + "stockItemDeleteFailure": "Δεν ήταν δυνατή η διαγραφή του αντικειμένου αποθέματος", "@stockItemDeleteFailure": {}, - "stockItemDeleteSuccess": "Stock item deleted", + "stockItemDeleteSuccess": "Το αντικείμενο αποθέματος διαγράφηκε", "@stockItemDeleteSuccess": {}, - "stockItemHistory": "Stock History", + "stockItemHistory": "Ιστορικό Αποθέματος", "@stockItemHistory": {}, - "stockItemHistoryDetail": "Display historical stock tracking information", + "stockItemHistoryDetail": "Εμφάνιση ιστορικών πληροφοριών παρακολούθησης αποθέματος", "@stockItemHistoryDetail": {}, - "stockItemTransferred": "Stock item transferred", + "stockItemTransferred": "Το αντικείμενο αποθέματος μεταφέρθηκε", "@stockItemTransferred": {}, - "stockItemUpdated": "Stock item updated", + "stockItemUpdated": "Το αντικείμενο αποθέματος ενημερώθηκε", "@stockItemUpdated": {}, - "stockItemsNotAvailable": "No stock items available", + "stockItemsNotAvailable": "Δεν υπάρχουν διαθέσιμα αντικείμενα αποθέματος", "@stockItemsNotAvailable": {}, - "stockItemNotes": "Stock Item Notes", + "stockItemNotes": "Σημειώσεις Αντικειμένου Αποθέματος", "@stockItemNotes": {}, - "stockItemUpdateSuccess": "Stock item updated", + "stockItemUpdateSuccess": "Το αντικείμενο αποθέματος ενημερώθηκε", "@stockItemUpdateSuccess": {}, - "stockItemUpdateFailure": "Stock item update failed", + "stockItemUpdateFailure": "Η ενημέρωση του αντικειμένου απέτυχε", "@stockItemUpdateFailure": {}, - "stockLocation": "Stock Location", + "stockLocation": "Τοποθεσία Αποθέματος", "@stockLocation": { "description": "stock location" }, - "stockLocations": "Stock Locations", + "stockLocations": "Τοποθεσίες Αποθέματος", "@stockLocations": {}, - "stockTopLevel": "Top level stock location", + "stockTopLevel": "Τοποθεσία αποθέματος ανώτερου επιπέδου", "@stockTopLevel": {}, - "strictHttps": "Use Strict HTTPS", + "strictHttps": "Χρήση Αποκλειστικού HTTPS", "@strictHttps": {}, - "strictHttpsDetails": "Enforce strict checking of HTTPs certificates", + "strictHttpsDetails": "Επιβολή αυστηρού ελέγχου πιστοποιητικών HTTPS", "@strictHttpsDetails": {}, - "subcategory": "Subcategory", + "subcategory": "Υποκατηγορία", "@subcategory": {}, - "subcategories": "Subcategories", + "subcategories": "Υποκατηγορίες", "@subcategories": {}, - "sublocation": "Sublocation", + "sublocation": "Υποτοποθεσία", "@sublocation": {}, - "sublocations": "Sublocations", + "sublocations": "Υποτοποθεσίες", "@sublocations": {}, - "sublocationNone": "No Sublocations", + "sublocationNone": "Δεν υπάρχουν υποτοποθεσίες", "@sublocationNone": {}, - "sublocationNoneDetail": "No sublocations available", + "sublocationNoneDetail": "Δεν υπάρχουν διαθέσιμες υποτοποθεσίες", "@sublocationNoneDetail": {}, - "submitFeedback": "Submit Feedback", + "submitFeedback": "Υποβολή Ανατροφοδότησης", "@submitFeedback": {}, - "suppliedParts": "Supplied Parts", + "suppliedParts": "Προμηθευμένα Εξαρτήματα", "@suppliedParts": {}, - "supplier": "Supplier", + "supplier": "Προμηθευτής", "@supplier": {}, - "supplierPart": "Supplier Part", + "supplierPart": "Κωδικός Προμηθευτή", "@supplierPart": {}, - "supplierPartEdit": "Edit Supplier Part", + "supplierPartEdit": "Επεξεργασία Κωδικού Προμηθευτή", "@supplierPartEdit": {}, - "supplierPartNumber": "Supplier Part Number", + "supplierPartNumber": "Αριθμός Κωδικού Προμηθευτή", "@supplierPartNumber": {}, - "supplierPartUpdated": "Supplier Part Updated", + "supplierPartUpdated": "Ο κωδικός προμηθευτή ενημερώθηκε", "@supplierPartUpdated": {}, - "supplierParts": "Supplier Parts", + "supplierParts": "Κωδικοί Προμηθευτή", "@supplierParts": {}, - "suppliers": "Suppliers", + "suppliers": "Προμηθευτές", "@suppliers": {}, - "supplierReference": "Supplier Reference", + "supplierReference": "Αναφορά Προμηθευτή", "@supplierReference": {}, - "switchCamera": "Switch Camera", + "switchCamera": "Αλλαγή Κάμερας", "@switchCamera": {}, - "takePicture": "Take Picture", + "takePicture": "Λήψη Φωτογραφίας", "@takePicture": {}, - "targetDate": "Target Date", + "targetDate": "Ημερομηνία Στόχος", "@targetDate": {}, - "templatePart": "Parent Template Part", + "templatePart": "Γονικό Πρότυπο Εξάρτημα", "@templatePart": {}, - "testName": "Test Name", + "testName": "Όνομα Δοκιμής", "@testName": {}, - "testPassedOrFailed": "Test passed or failed", + "testPassedOrFailed": "Επιτυχία ή αποτυχία δοκιμής", "@testPassedOrFailed": {}, - "testsRequired": "Required Tests", + "testsRequired": "Απαιτούμενες Δοκιμές", "@testsRequired": {}, - "testResults": "Test Results", + "testResults": "Αποτελέσματα Δοκιμών", "@testResults": { "description": "" }, - "testResultsDetail": "Display stock item test results", + "testResultsDetail": "Εμφάνιση αποτελεσμάτων δοκιμών αντικειμένου αποθέματος", "@testResultsDetail": {}, - "testResultAdd": "Add Test Result", + "testResultAdd": "Προσθήκη Αποτελέσματος Δοκιμής", "@testResultAdd": {}, - "testResultNone": "No Test Results", + "testResultNone": "Δεν υπάρχουν αποτελέσματα δοκιμών", "@testResultNone": {}, - "testResultNoneDetail": "No test results available", + "testResultNoneDetail": "Δεν υπάρχουν διαθέσιμα αποτελέσματα δοκιμών", "@testResultNoneDetail": {}, - "testResultUploadFail": "Error uploading test result", + "testResultUploadFail": "Σφάλμα κατά την αποστολή αποτελέσματος δοκιμής", "@testResultUploadFail": {}, - "testResultUploadPass": "Test result uploaded", + "testResultUploadPass": "Το αποτέλεσμα δοκιμής μεταφορτώθηκε", "@testResultUploadPass": {}, - "timeout": "Timeout", + "timeout": "Λήξη Χρόνου", "@timeout": { "description": "" }, - "toggleTorch": "Toggle Torch", + "toggleTorch": "Εναλλαγή Φακού", "@toggleTorch": {}, - "tokenError": "Token Error", + "tokenError": "Σφάλμα Διακριτικού", "@tokenError": {}, - "tokenMissing": "Missing Token", + "tokenMissing": "Λείπει Διακριτικό", "@tokenMissing": {}, - "tokenMissingFromResponse": "Access token missing from response", + "tokenMissingFromResponse": "Το διακριτικό πρόσβασης λείπει από την απόκριση", "@tokenMissingFromResponse": {}, - "totalPrice": "Total Price", + "totalPrice": "Συνολική Τιμή", "@totalPrice": {}, - "trackingNumber": "Tracking Number", + "trackingNumber": "Αριθμός Παρακολούθησης", "@trackingNumber": {}, - "transfer": "Transfer", + "transfer": "Μεταφορά", "@transfer": { "description": "transfer" }, - "transferStock": "Transfer Stock", + "transferStock": "Μεταφορά Αποθέματος", "@transferStock": { "description": "transfer stock" }, - "transferStockDetail": "Transfer item to a different location", + "transferStockDetail": "Μεταφορά του αντικειμένου σε διαφορετική τοποθεσία", "@transferStockDetail": {}, - "transferStockLocation": "Transfer Stock Location", + "transferStockLocation": "Μεταφορά Τοποθεσίας Αποθέματος", "@transferStockLocation": {}, - "transferStockLocationDetail": "Transfer this stock location into another", + "transferStockLocationDetail": "Μεταφορά αυτής της τοποθεσίας αποθέματος σε άλλη", "@transferStockLocationDetail": {}, - "translate": "Translate", + "translate": "Μετάφραση", "@translate": {}, - "translateHelp": "Help translate the InvenTree app", + "translateHelp": "Βοηθήστε στη μετάφραση της εφαρμογής InvenTree", "@translateHelp": {}, - "unavailable": "Unavailable", + "unavailable": "Μη Διαθέσιμο", "@unavailable": {}, - "unavailableDetail": "Item is not available", + "unavailableDetail": "Το αντικείμενο δεν είναι διαθέσιμο", "@unavailableDetail": {}, - "unitPrice": "Unit Price", + "unitPrice": "Τιμή Μονάδας", "@unitPrice": {}, - "units": "Units", + "units": "Μονάδες", "@units": {}, - "unknownResponse": "Unknown Response", + "unknownResponse": "Άγνωστη Απόκριση", "@unknownResponse": {}, - "upload": "Upload", + "upload": "Μεταφόρτωση", "@upload": {}, - "uploadFailed": "File upload failed", + "uploadFailed": "Η μεταφόρτωση του αρχείου απέτυχε", "@uploadFailed": {}, - "uploadSuccess": "File uploaded", + "uploadSuccess": "Το αρχείο μεταφορτώθηκε", "@uploadSuccess": {}, - "uploadImage": "Upload Image", + "uploadImage": "Μεταφόρτωση Εικόνας", "@uploadImage": {}, - "usedIn": "Used In", + "usedIn": "Χρησιμοποιείται Σε", "@usedIn": {}, - "usedInDetails": "Assemblies which require this part", + "usedInDetails": "Συναρμολογήσεις που απαιτούν αυτό το εξάρτημα", "@usedInDetails": {}, - "username": "Username", + "username": "Όνομα Χρήστη", "@username": {}, - "usernameEmpty": "Username cannot be empty", + "usernameEmpty": "Το όνομα χρήστη δεν μπορεί να είναι κενό", "@usernameEmpty": {}, - "value": "Value", + "value": "Τιμή", "@value": { "description": "value" }, - "valueCannotBeEmpty": "Value cannot be empty", + "valueCannotBeEmpty": "Η τιμή δεν μπορεί να είναι κενή", "@valueCannotBeEmpty": {}, - "valueRequired": "Value is required", + "valueRequired": "Η τιμή απαιτείται", "@valueRequired": {}, - "variants": "Variants", + "variants": "Παραλλαγές", "@variants": {}, - "version": "Version", + "version": "Έκδοση", "@version": {}, - "viewSupplierPart": "View Supplier Part", + "viewSupplierPart": "Προβολή Κωδικού Προμηθευτή", "@viewSupplierPart": {}, - "website": "Website", + "website": "Ιστοσελίδα", "@website": {}, - "yes": "Yes", + "yes": "Ναι", "@yes": {}, - "price": "Price", + "price": "Τιμή", "@price": {}, - "priceRange": "Price Range", + "priceRange": "Εύρος Τιμών", "@priceRange": {}, - "priceOverrideMin": "Minimum Price Override", + "priceOverrideMin": "Ελάχιστη Τιμή Override", "@priceOverrideMin": {}, - "priceOverrideMax": "Maximum Price Override", + "priceOverrideMax": "Μέγιστη Τιμή Override", "@priceOverrideMax": {}, - "salePrice": "Sale Price", + "salePrice": "Τιμή Πώλησης", "@salePrice": {}, - "saleHistory": "Sale History", + "saleHistory": "Ιστορικό Πωλήσεων", "@saleHistory": {}, - "supplierPricing": "Supplier Pricing", + "supplierPricing": "Τιμολόγηση Προμηθευτή", "@supplierPricing": {}, - "bomCost": "BOM Cost", + "bomCost": "Κόστος BOM", "@bomCost": {}, - "internalCost": "Internal Cost", + "internalCost": "Εσωτερικό Κόστος", "@internalCost": {}, - "variantCost": "Variant Cost", + "variantCost": "Κόστος Παραλλαγής", "@variantCost": {}, - "overallPricing": "Overall Pricing", + "overallPricing": "Συνολική Τιμολόγηση", "@overallPricing": {}, - "pricingOverrides": "Pricing Overrides", + "pricingOverrides": "Price Overrides", "@pricingOverrides": {}, - "currency": "Currency", + "currency": "Νόμισμα", "@currency": {}, - "priceBreaks": "Price Breaks", + "priceBreaks": "Τμήματα Τιμής", "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/vi_VN/app_vi_VN.arb b/lib/l10n/vi_VN/app_vi_VN.arb index fd0d2710..7accb1ab 100644 --- a/lib/l10n/vi_VN/app_vi_VN.arb +++ b/lib/l10n/vi_VN/app_vi_VN.arb @@ -282,7 +282,7 @@ "@editItem": {}, "editLineItem": "Sửa dòng sản phẩm", "@editLineItem": {}, - "email": "Email", + "email": "Địa chỉ email", "@email": {}, "enterPassword": "Nhập mật khẩu", "@enterPassword": {}, @@ -468,7 +468,7 @@ "@itemInLocation": {}, "itemDeleted": "Hàng hóa đã bị xóa", "@itemDeleted": {}, - "itemUpdated": "Item updated", + "itemUpdated": "Mẫu đã được cập nhật", "@itemUpdated": {}, "keywords": "Từ khóa", "@keywords": {}, From 3ee2192c92a12a46f9ec7e9644e6c5120d48669b Mon Sep 17 00:00:00 2001 From: Alexander Leisentritt Date: Fri, 21 Nov 2025 21:27:26 +0100 Subject: [PATCH 28/40] Update barcode scan pause instruction text (#728) --- lib/l10n/app_en.arb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 9ea177e9..905be193 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -148,7 +148,7 @@ "barcodeScanPaused": "Barcode scanning paused", "@barodeScanPaused": {}, - "barcodeScanPause": "Tap or hold to pause scanning", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Scan to assign barcode", From 6e02d1da975ea754a79bf54b93fc20d74548ff16 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sun, 23 Nov 2025 09:08:14 +1100 Subject: [PATCH 29/40] New Crowdin updates (#731) * New translations app_en.arb (Romanian) * New translations app_en.arb (French) * New translations app_en.arb (Spanish) * New translations app_en.arb (Arabic) * New translations app_en.arb (Bulgarian) * New translations app_en.arb (Czech) * New translations app_en.arb (Danish) * New translations app_en.arb (German) * New translations app_en.arb (Greek) * New translations app_en.arb (Finnish) * New translations app_en.arb (Hebrew) * New translations app_en.arb (Hungarian) * New translations app_en.arb (Italian) * New translations app_en.arb (Japanese) * New translations app_en.arb (Korean) * New translations app_en.arb (Lithuanian) * New translations app_en.arb (Dutch) * New translations app_en.arb (Norwegian) * New translations app_en.arb (Polish) * New translations app_en.arb (Portuguese) * New translations app_en.arb (Russian) * New translations app_en.arb (Slovak) * New translations app_en.arb (Slovenian) * New translations app_en.arb (Swedish) * New translations app_en.arb (Turkish) * New translations app_en.arb (Chinese Simplified) * New translations app_en.arb (Chinese Traditional) * New translations app_en.arb (Vietnamese) * New translations app_en.arb (Portuguese, Brazilian) * New translations app_en.arb (Indonesian) * New translations app_en.arb (Persian) * New translations app_en.arb (Spanish, Mexico) * New translations app_en.arb (Thai) * New translations app_en.arb (Estonian) * New translations app_en.arb (Latvian) * New translations app_en.arb (Hindi) * New translations app_en.arb (Serbian (Latin)) * New translations app_en.arb (Ukrainian) * New translations app_en.arb (Romanian) --- lib/l10n/ar_SA/app_ar_SA.arb | 6 +++++- lib/l10n/bg_BG/app_bg_BG.arb | 6 +++++- lib/l10n/cs_CZ/app_cs_CZ.arb | 6 +++++- lib/l10n/da_DK/app_da_DK.arb | 6 +++++- lib/l10n/de_DE/app_de_DE.arb | 6 +++++- lib/l10n/el_GR/app_el_GR.arb | 6 +++++- lib/l10n/es_ES/app_es_ES.arb | 6 +++++- lib/l10n/es_MX/app_es_MX.arb | 6 +++++- lib/l10n/et_EE/app_et_EE.arb | 6 +++++- lib/l10n/fa_IR/app_fa_IR.arb | 6 +++++- lib/l10n/fi_FI/app_fi_FI.arb | 6 +++++- lib/l10n/fr_FR/app_fr_FR.arb | 6 +++++- lib/l10n/he_IL/app_he_IL.arb | 6 +++++- lib/l10n/hi_IN/app_hi_IN.arb | 6 +++++- lib/l10n/hu_HU/app_hu_HU.arb | 6 +++++- lib/l10n/id_ID/app_id_ID.arb | 6 +++++- lib/l10n/it_IT/app_it_IT.arb | 6 +++++- lib/l10n/ja_JP/app_ja_JP.arb | 6 +++++- lib/l10n/ko_KR/app_ko_KR.arb | 6 +++++- lib/l10n/lt_LT/app_lt_LT.arb | 6 +++++- lib/l10n/lv_LV/app_lv_LV.arb | 6 +++++- lib/l10n/nl_NL/app_nl_NL.arb | 6 +++++- lib/l10n/no_NO/app_no_NO.arb | 6 +++++- lib/l10n/pl_PL/app_pl_PL.arb | 6 +++++- lib/l10n/pt_BR/app_pt_BR.arb | 6 +++++- lib/l10n/pt_PT/app_pt_PT.arb | 6 +++++- lib/l10n/ro_RO/app_ro_RO.arb | 10 +++++++--- lib/l10n/ru_RU/app_ru_RU.arb | 6 +++++- lib/l10n/sk_SK/app_sk_SK.arb | 6 +++++- lib/l10n/sl_SI/app_sl_SI.arb | 6 +++++- lib/l10n/sr_CS/app_sr_CS.arb | 6 +++++- lib/l10n/sv_SE/app_sv_SE.arb | 6 +++++- lib/l10n/th_TH/app_th_TH.arb | 6 +++++- lib/l10n/tr_TR/app_tr_TR.arb | 6 +++++- lib/l10n/uk_UA/app_uk_UA.arb | 8 +++++++- lib/l10n/vi_VN/app_vi_VN.arb | 6 +++++- lib/l10n/zh_CN/app_zh_CN.arb | 6 +++++- lib/l10n/zh_TW/app_zh_TW.arb | 6 +++++- 38 files changed, 194 insertions(+), 40 deletions(-) diff --git a/lib/l10n/ar_SA/app_ar_SA.arb b/lib/l10n/ar_SA/app_ar_SA.arb index f865457b..1f8c94ee 100644 --- a/lib/l10n/ar_SA/app_ar_SA.arb +++ b/lib/l10n/ar_SA/app_ar_SA.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Barcode scanning paused", "@barodeScanPaused": {}, - "barcodeScanPause": "Tap or hold to pause scanning", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Scan to assign barcode", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Keywords", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Label Printing", "@labelPrinting": {}, "labelPrintingDetail": "Enable label printing", diff --git a/lib/l10n/bg_BG/app_bg_BG.arb b/lib/l10n/bg_BG/app_bg_BG.arb index 57bd141d..01a6299b 100644 --- a/lib/l10n/bg_BG/app_bg_BG.arb +++ b/lib/l10n/bg_BG/app_bg_BG.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Barcode scanning paused", "@barodeScanPaused": {}, - "barcodeScanPause": "Tap or hold to pause scanning", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Scan to assign barcode", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Keywords", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Label Printing", "@labelPrinting": {}, "labelPrintingDetail": "Enable label printing", diff --git a/lib/l10n/cs_CZ/app_cs_CZ.arb b/lib/l10n/cs_CZ/app_cs_CZ.arb index 28550226..51eb3672 100644 --- a/lib/l10n/cs_CZ/app_cs_CZ.arb +++ b/lib/l10n/cs_CZ/app_cs_CZ.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Skenování čárových kódů pozastaveno", "@barodeScanPaused": {}, - "barcodeScanPause": "Klepnutím nebo podržením pozastavíte skenování", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Skenovat pro přiřazení čárového kódu", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Klíčová slova", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Tisk štítku", "@labelPrinting": {}, "labelPrintingDetail": "Povolit tisk štítku", diff --git a/lib/l10n/da_DK/app_da_DK.arb b/lib/l10n/da_DK/app_da_DK.arb index 41f578c4..697846b2 100644 --- a/lib/l10n/da_DK/app_da_DK.arb +++ b/lib/l10n/da_DK/app_da_DK.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Stregkode skanning på pause", "@barodeScanPaused": {}, - "barcodeScanPause": "Tryk eller hold nede for at pause i skanningen", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Scan for at tildele stregkode", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Keywords", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Label Printing", "@labelPrinting": {}, "labelPrintingDetail": "Enable label printing", diff --git a/lib/l10n/de_DE/app_de_DE.arb b/lib/l10n/de_DE/app_de_DE.arb index e1c3fd6e..dc075efa 100644 --- a/lib/l10n/de_DE/app_de_DE.arb +++ b/lib/l10n/de_DE/app_de_DE.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Barcode-Scannen angehalten", "@barodeScanPaused": {}, - "barcodeScanPause": "Tippen oder halten um das Scannen anzuhalten", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Scannen um Barcode zuzuweisen", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Schlüsselwörter", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Etikettendruck", "@labelPrinting": {}, "labelPrintingDetail": "Etikettendruck aktivieren", diff --git a/lib/l10n/el_GR/app_el_GR.arb b/lib/l10n/el_GR/app_el_GR.arb index e254be3f..436d4f79 100644 --- a/lib/l10n/el_GR/app_el_GR.arb +++ b/lib/l10n/el_GR/app_el_GR.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Παύση σάρωσης barcode", "@barodeScanPaused": {}, - "barcodeScanPause": "Πατήστε ή κρατήστε πατημένο για παύση σάρωσης", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Σάρωση για εκχώρηση barcode", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Λέξεις-Κλειδιά", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Εκτύπωση Ετικετών", "@labelPrinting": {}, "labelPrintingDetail": "Ενεργοποίηση εκτύπωσης ετικετών", diff --git a/lib/l10n/es_ES/app_es_ES.arb b/lib/l10n/es_ES/app_es_ES.arb index 98f8eb62..ef947d4e 100644 --- a/lib/l10n/es_ES/app_es_ES.arb +++ b/lib/l10n/es_ES/app_es_ES.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Escaneo de código de barras en pausa", "@barodeScanPaused": {}, - "barcodeScanPause": "Toque o mantenga pulsado para pausar el escaneo", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Escanear para asignar código de barras", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Palabras claves", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Impresión de etiquetas", "@labelPrinting": {}, "labelPrintingDetail": "Habilitar impresión de etiquetas", diff --git a/lib/l10n/es_MX/app_es_MX.arb b/lib/l10n/es_MX/app_es_MX.arb index 87e27b3c..4f0ec84f 100644 --- a/lib/l10n/es_MX/app_es_MX.arb +++ b/lib/l10n/es_MX/app_es_MX.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Escaneo de código de barras en pausa", "@barodeScanPaused": {}, - "barcodeScanPause": "Toque o mantenga pulsado para pausar el escaneo", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Escanear para asignar código de barras", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Palabras claves", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Impresión de etiquetas", "@labelPrinting": {}, "labelPrintingDetail": "Habilitar impresión de etiquetas", diff --git a/lib/l10n/et_EE/app_et_EE.arb b/lib/l10n/et_EE/app_et_EE.arb index b8876716..b6847d84 100644 --- a/lib/l10n/et_EE/app_et_EE.arb +++ b/lib/l10n/et_EE/app_et_EE.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Barcode scanning paused", "@barodeScanPaused": {}, - "barcodeScanPause": "Tap or hold to pause scanning", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Scan to assign barcode", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Märksõnad", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Label Printing", "@labelPrinting": {}, "labelPrintingDetail": "Enable label printing", diff --git a/lib/l10n/fa_IR/app_fa_IR.arb b/lib/l10n/fa_IR/app_fa_IR.arb index 2dc9b6cd..02358b03 100644 --- a/lib/l10n/fa_IR/app_fa_IR.arb +++ b/lib/l10n/fa_IR/app_fa_IR.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "اسکن بارکد متوقف شد", "@barodeScanPaused": {}, - "barcodeScanPause": "برای توقف اسکن ضربه بزنید یا نگه دارید", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "برای اختصاص بارکد اسکن کنید", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "کلمات کلیدی", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "چاپ لیبل", "@labelPrinting": {}, "labelPrintingDetail": "چاپ لیبل را انتخاب کنید", diff --git a/lib/l10n/fi_FI/app_fi_FI.arb b/lib/l10n/fi_FI/app_fi_FI.arb index b1250423..26ba3e3e 100644 --- a/lib/l10n/fi_FI/app_fi_FI.arb +++ b/lib/l10n/fi_FI/app_fi_FI.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Barcode scanning paused", "@barodeScanPaused": {}, - "barcodeScanPause": "Tap or hold to pause scanning", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Scan to assign barcode", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Avainsanat", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Label Printing", "@labelPrinting": {}, "labelPrintingDetail": "Enable label printing", diff --git a/lib/l10n/fr_FR/app_fr_FR.arb b/lib/l10n/fr_FR/app_fr_FR.arb index 9762e8a0..929c962d 100644 --- a/lib/l10n/fr_FR/app_fr_FR.arb +++ b/lib/l10n/fr_FR/app_fr_FR.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Scan de code-barres en pause", "@barodeScanPaused": {}, - "barcodeScanPause": "Appuyez ou maintenez pour mettre en pause le scan", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Scanner pour attribuer un code-barres", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Mots clés", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Impression étiquettes", "@labelPrinting": {}, "labelPrintingDetail": "Activer l'impression d'étiquettes", diff --git a/lib/l10n/he_IL/app_he_IL.arb b/lib/l10n/he_IL/app_he_IL.arb index ef1c0b9d..22731081 100644 --- a/lib/l10n/he_IL/app_he_IL.arb +++ b/lib/l10n/he_IL/app_he_IL.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "סריקת ברקוד מושהית", "@barodeScanPaused": {}, - "barcodeScanPause": "בקש או החזק כדי להשהות את הסריקה", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "סרוק כדי להקצות ברקוד", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "מילות מפתח", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "הדפסת תווית", "@labelPrinting": {}, "labelPrintingDetail": "אפשר הדפסת תווית", diff --git a/lib/l10n/hi_IN/app_hi_IN.arb b/lib/l10n/hi_IN/app_hi_IN.arb index 9bdf06b1..c0c3cbb2 100644 --- a/lib/l10n/hi_IN/app_hi_IN.arb +++ b/lib/l10n/hi_IN/app_hi_IN.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Barcode scanning paused", "@barodeScanPaused": {}, - "barcodeScanPause": "Tap or hold to pause scanning", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Scan to assign barcode", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Keywords", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Label Printing", "@labelPrinting": {}, "labelPrintingDetail": "Enable label printing", diff --git a/lib/l10n/hu_HU/app_hu_HU.arb b/lib/l10n/hu_HU/app_hu_HU.arb index 1837a91d..3286dfae 100644 --- a/lib/l10n/hu_HU/app_hu_HU.arb +++ b/lib/l10n/hu_HU/app_hu_HU.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Vonalkód olvasás megállítva", "@barodeScanPaused": {}, - "barcodeScanPause": "Kattints vagy tartsd lenyomva a beolvasás felfüggesztéséhez", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Kódolvasás a hozzárendeléshez", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Kulcsszavak", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Címke nyomtatás", "@labelPrinting": {}, "labelPrintingDetail": "Címke nyomtatás engedélyezése", diff --git a/lib/l10n/id_ID/app_id_ID.arb b/lib/l10n/id_ID/app_id_ID.arb index 205c20ea..2346557d 100644 --- a/lib/l10n/id_ID/app_id_ID.arb +++ b/lib/l10n/id_ID/app_id_ID.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Pemindaian barcode dijeda", "@barodeScanPaused": {}, - "barcodeScanPause": "Ketuk atau tahan untuk menjeda pemindaian", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Pindai untuk menetapkan barcode", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Kata Kunci", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Label Printing", "@labelPrinting": {}, "labelPrintingDetail": "Enable label printing", diff --git a/lib/l10n/it_IT/app_it_IT.arb b/lib/l10n/it_IT/app_it_IT.arb index 81a74a8c..db6286ab 100644 --- a/lib/l10n/it_IT/app_it_IT.arb +++ b/lib/l10n/it_IT/app_it_IT.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Scansione codice a barre in pausa", "@barodeScanPaused": {}, - "barcodeScanPause": "Premi oppure tieni premuti per mettere in pausa la scansione", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Scansiona per assegnare codice a barre", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Parole Chiave", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Etichetta in stampa", "@labelPrinting": {}, "labelPrintingDetail": "Abilita stampa etichette", diff --git a/lib/l10n/ja_JP/app_ja_JP.arb b/lib/l10n/ja_JP/app_ja_JP.arb index 0489fcf0..88722da8 100644 --- a/lib/l10n/ja_JP/app_ja_JP.arb +++ b/lib/l10n/ja_JP/app_ja_JP.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "バーコードスキャンを一時停止中", "@barodeScanPaused": {}, - "barcodeScanPause": "スキャンを一時停止するにはタップまたはホールドします", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "スキャンしてバーコードを割り当てます", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "キーワード", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "ラベル印刷", "@labelPrinting": {}, "labelPrintingDetail": "ラベル印刷を有効化", diff --git a/lib/l10n/ko_KR/app_ko_KR.arb b/lib/l10n/ko_KR/app_ko_KR.arb index ba576bf6..390183d7 100644 --- a/lib/l10n/ko_KR/app_ko_KR.arb +++ b/lib/l10n/ko_KR/app_ko_KR.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Barcode scanning paused", "@barodeScanPaused": {}, - "barcodeScanPause": "Tap or hold to pause scanning", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Scan to assign barcode", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "키워드", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Label Printing", "@labelPrinting": {}, "labelPrintingDetail": "Enable label printing", diff --git a/lib/l10n/lt_LT/app_lt_LT.arb b/lib/l10n/lt_LT/app_lt_LT.arb index abb7b83c..dbb63e91 100644 --- a/lib/l10n/lt_LT/app_lt_LT.arb +++ b/lib/l10n/lt_LT/app_lt_LT.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Barcode scanning paused", "@barodeScanPaused": {}, - "barcodeScanPause": "Tap or hold to pause scanning", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Scan to assign barcode", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Keywords", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Label Printing", "@labelPrinting": {}, "labelPrintingDetail": "Enable label printing", diff --git a/lib/l10n/lv_LV/app_lv_LV.arb b/lib/l10n/lv_LV/app_lv_LV.arb index acb13d52..064ec613 100644 --- a/lib/l10n/lv_LV/app_lv_LV.arb +++ b/lib/l10n/lv_LV/app_lv_LV.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Barcode scanning paused", "@barodeScanPaused": {}, - "barcodeScanPause": "Tap or hold to pause scanning", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Scan to assign barcode", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Keywords", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Label Printing", "@labelPrinting": {}, "labelPrintingDetail": "Enable label printing", diff --git a/lib/l10n/nl_NL/app_nl_NL.arb b/lib/l10n/nl_NL/app_nl_NL.arb index 83d40f07..d8eab7d2 100644 --- a/lib/l10n/nl_NL/app_nl_NL.arb +++ b/lib/l10n/nl_NL/app_nl_NL.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Barcode scannen gepauzeerd", "@barodeScanPaused": {}, - "barcodeScanPause": "Tik of houd om scannen te pauzeren", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Scan om streepjescode toe te wijzen", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Trefwoorden", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Label afdrukken", "@labelPrinting": {}, "labelPrintingDetail": "Label afdrukken inschakelen", diff --git a/lib/l10n/no_NO/app_no_NO.arb b/lib/l10n/no_NO/app_no_NO.arb index 3c6ee3dd..d9e31963 100644 --- a/lib/l10n/no_NO/app_no_NO.arb +++ b/lib/l10n/no_NO/app_no_NO.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Skanning satt på pause", "@barodeScanPaused": {}, - "barcodeScanPause": "Trykk eller hold for å pause skanning", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Skann for å tildele strekkode", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Nøkkelord", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Etikettutskrift", "@labelPrinting": {}, "labelPrintingDetail": "Aktiver etikettutskrift", diff --git a/lib/l10n/pl_PL/app_pl_PL.arb b/lib/l10n/pl_PL/app_pl_PL.arb index 2743161c..ac7a6c24 100644 --- a/lib/l10n/pl_PL/app_pl_PL.arb +++ b/lib/l10n/pl_PL/app_pl_PL.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Skanowanie kodów kreskowych wstrzymane", "@barodeScanPaused": {}, - "barcodeScanPause": "Dotknij lub przytrzymaj, aby wstrzymać skanowanie", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Zeskanuj aby przypisać kod kreskowy", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Słowa kluczowe", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Drukowanie etykiet", "@labelPrinting": {}, "labelPrintingDetail": "Włącz drukowanie etykiet", diff --git a/lib/l10n/pt_BR/app_pt_BR.arb b/lib/l10n/pt_BR/app_pt_BR.arb index 43a7cfbb..991ea1de 100644 --- a/lib/l10n/pt_BR/app_pt_BR.arb +++ b/lib/l10n/pt_BR/app_pt_BR.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Escaneamento de código de barras pausado", "@barodeScanPaused": {}, - "barcodeScanPause": "Toque ou segure para pausar o escaneamento", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Escaneie para atribuir código de barras", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Palavras chave", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Impressão de Etiqueta", "@labelPrinting": {}, "labelPrintingDetail": "Habilitar Impressão de Etiqueta", diff --git a/lib/l10n/pt_PT/app_pt_PT.arb b/lib/l10n/pt_PT/app_pt_PT.arb index c0b8366e..4fc35835 100644 --- a/lib/l10n/pt_PT/app_pt_PT.arb +++ b/lib/l10n/pt_PT/app_pt_PT.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Verificação do código de barras pausada", "@barodeScanPaused": {}, - "barcodeScanPause": "Toque ou segure para pausar a verificação", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Escaneie para atribuir código de barras", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Palavras-chave", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Impressão de etiqueta", "@labelPrinting": {}, "labelPrintingDetail": "Ativar impressão de etiquetas", diff --git a/lib/l10n/ro_RO/app_ro_RO.arb b/lib/l10n/ro_RO/app_ro_RO.arb index ca8982e6..ff74b986 100644 --- a/lib/l10n/ro_RO/app_ro_RO.arb +++ b/lib/l10n/ro_RO/app_ro_RO.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Scanare cod de bare întreruptă", "@barodeScanPaused": {}, - "barcodeScanPause": "Atingeți sau țineți apăsat pentru a întrerupe scanarea", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Scanează pentru a atribui cod de bare", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Cuvinte cheie", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Printare etichete", "@labelPrinting": {}, "labelPrintingDetail": "Permite tipărirea etichetei", @@ -1150,9 +1154,9 @@ "@usedIn": {}, "usedInDetails": "Assemblies which require this part", "@usedInDetails": {}, - "username": "Username", + "username": "Nume utilizator", "@username": {}, - "usernameEmpty": "Username cannot be empty", + "usernameEmpty": "Numele de utilizator nu poate fi gol", "@usernameEmpty": {}, "value": "Value", "@value": { diff --git a/lib/l10n/ru_RU/app_ru_RU.arb b/lib/l10n/ru_RU/app_ru_RU.arb index 3d31ce2e..fa9f15bc 100644 --- a/lib/l10n/ru_RU/app_ru_RU.arb +++ b/lib/l10n/ru_RU/app_ru_RU.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Сканирование штрих-кода приостановлено", "@barodeScanPaused": {}, - "barcodeScanPause": "Нажмите или удерживайте, чтобы приостановить сканирование", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Сканировать для присвоения штрих-кода", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Ключевые слова", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Печать этикеток", "@labelPrinting": {}, "labelPrintingDetail": "Включить печать этикеток", diff --git a/lib/l10n/sk_SK/app_sk_SK.arb b/lib/l10n/sk_SK/app_sk_SK.arb index e0eabe3f..ef1ac29d 100644 --- a/lib/l10n/sk_SK/app_sk_SK.arb +++ b/lib/l10n/sk_SK/app_sk_SK.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Barcode scanning paused", "@barodeScanPaused": {}, - "barcodeScanPause": "Tap or hold to pause scanning", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Scan to assign barcode", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Keywords", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Label Printing", "@labelPrinting": {}, "labelPrintingDetail": "Enable label printing", diff --git a/lib/l10n/sl_SI/app_sl_SI.arb b/lib/l10n/sl_SI/app_sl_SI.arb index 746c8459..1414c2c1 100644 --- a/lib/l10n/sl_SI/app_sl_SI.arb +++ b/lib/l10n/sl_SI/app_sl_SI.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Barcode scanning paused", "@barodeScanPaused": {}, - "barcodeScanPause": "Tap or hold to pause scanning", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Scan to assign barcode", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Keywords", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Label Printing", "@labelPrinting": {}, "labelPrintingDetail": "Enable label printing", diff --git a/lib/l10n/sr_CS/app_sr_CS.arb b/lib/l10n/sr_CS/app_sr_CS.arb index 0e2d4009..e48713ce 100644 --- a/lib/l10n/sr_CS/app_sr_CS.arb +++ b/lib/l10n/sr_CS/app_sr_CS.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Pauzirano skeniranje bar kodova", "@barodeScanPaused": {}, - "barcodeScanPause": "Pritisni ili drži za pauzu skeniranja", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Skeniraj za dodelu bar koda", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Ključne reči", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Štampanje natpisa", "@labelPrinting": {}, "labelPrintingDetail": "Omogući štampanje natpisa", diff --git a/lib/l10n/sv_SE/app_sv_SE.arb b/lib/l10n/sv_SE/app_sv_SE.arb index 8d7c4566..ae837a46 100644 --- a/lib/l10n/sv_SE/app_sv_SE.arb +++ b/lib/l10n/sv_SE/app_sv_SE.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Streckkodsskanning pausad", "@barodeScanPaused": {}, - "barcodeScanPause": "Tryck eller håll ned för att pausa skanning", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Skanna för att tilldela streckkod", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Nyckelord", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Utskrift av etiketter", "@labelPrinting": {}, "labelPrintingDetail": "Aktivera etikettutskrift", diff --git a/lib/l10n/th_TH/app_th_TH.arb b/lib/l10n/th_TH/app_th_TH.arb index d37c3c30..af0ca848 100644 --- a/lib/l10n/th_TH/app_th_TH.arb +++ b/lib/l10n/th_TH/app_th_TH.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "หยุดการสแกนบาร์โค้ด", "@barodeScanPaused": {}, - "barcodeScanPause": "Tap or hold to pause scanning", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Scan to assign barcode", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Keywords", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Label Printing", "@labelPrinting": {}, "labelPrintingDetail": "Enable label printing", diff --git a/lib/l10n/tr_TR/app_tr_TR.arb b/lib/l10n/tr_TR/app_tr_TR.arb index 3bfed5e6..dfffe0e6 100644 --- a/lib/l10n/tr_TR/app_tr_TR.arb +++ b/lib/l10n/tr_TR/app_tr_TR.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Barkod tarama duraklatıldı", "@barodeScanPaused": {}, - "barcodeScanPause": "Taramayı duraklatmak için dokunun veya basılı tutun", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Atanmış barkodu tara", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Anahtar kelimeler", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Etiket Yazdırma", "@labelPrinting": {}, "labelPrintingDetail": "Etiket yazdırmayı aktifleştir", diff --git a/lib/l10n/uk_UA/app_uk_UA.arb b/lib/l10n/uk_UA/app_uk_UA.arb index c10396c1..5eb5c487 100644 --- a/lib/l10n/uk_UA/app_uk_UA.arb +++ b/lib/l10n/uk_UA/app_uk_UA.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Сканування штрих-кодів призупинено", "@barodeScanPaused": {}, - "barcodeScanPause": "Торкніться або утримуйте, щоб призупинити сканування", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Сканувати щоб призначити штрих-код", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Ключові слова", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "Друк Ярликів", "@labelPrinting": {}, "labelPrintingDetail": "Увімкнути друк ярликів", @@ -510,6 +514,8 @@ "@locationCreate": {}, "locationCreateDetail": "Створити нове розташування на складі", "@locationCreateDetail": {}, + "locationDefault": "Default Location", + "@locationDefault": {}, "locationNotSet": "Розташування не вказано", "@locationNotSet": {}, "locationUpdated": "Розташування запасів оновлено", diff --git a/lib/l10n/vi_VN/app_vi_VN.arb b/lib/l10n/vi_VN/app_vi_VN.arb index 7accb1ab..77777c0f 100644 --- a/lib/l10n/vi_VN/app_vi_VN.arb +++ b/lib/l10n/vi_VN/app_vi_VN.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Quét mã vạch đã bị dừng", "@barodeScanPaused": {}, - "barcodeScanPause": "Nhấp hoặc giữ để dừng quét", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Quét để gán mã vạch", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "Từ khóa", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "In nhãn mã vạch", "@labelPrinting": {}, "labelPrintingDetail": "Bật in nhãn tem", diff --git a/lib/l10n/zh_CN/app_zh_CN.arb b/lib/l10n/zh_CN/app_zh_CN.arb index 28261460..edb54e2c 100644 --- a/lib/l10n/zh_CN/app_zh_CN.arb +++ b/lib/l10n/zh_CN/app_zh_CN.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "条形码扫描已暂停", "@barodeScanPaused": {}, - "barcodeScanPause": "点击或按住以暂停扫描", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "扫描以分配条形码", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "关键词", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "打印标签", "@labelPrinting": {}, "labelPrintingDetail": "启用标签打印功能", diff --git a/lib/l10n/zh_TW/app_zh_TW.arb b/lib/l10n/zh_TW/app_zh_TW.arb index 849aefec..f0ba7e55 100644 --- a/lib/l10n/zh_TW/app_zh_TW.arb +++ b/lib/l10n/zh_TW/app_zh_TW.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "條碼掃描已暫停", "@barodeScanPaused": {}, - "barcodeScanPause": "點擊或按住以暫停掃描", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "掃描以設置條碼", "@barcodeScanAssign": {}, @@ -472,6 +472,10 @@ "@itemUpdated": {}, "keywords": "關鍵字", "@keywords": {}, + "labelDriver": "Label Driver", + "@labelDriver": {}, + "labelSelectDriver": "Select Label Printer Driver", + "@labelSelectDriver": {}, "labelPrinting": "標籤印製", "@labelPrinting": {}, "labelPrintingDetail": "啓用標籤打印功能", From 7283c07b76ba980dfb3f842b3f04a2bc90f288c3 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sun, 23 Nov 2025 09:18:49 +1100 Subject: [PATCH 30/40] Form success fix (#733) * Fix order of operations on form success - Pop widget before running callback * Update release notes --- assets/release_notes.md | 5 +++++ lib/api_form.dart | 2 +- pubspec.yaml | 4 ++-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/assets/release_notes.md b/assets/release_notes.md index f97832ac..17fd96d1 100644 --- a/assets/release_notes.md +++ b/assets/release_notes.md @@ -1,3 +1,8 @@ +### 0.21.1 - November 2025 +--- + +- Fixed app freeze bug after form submission + ### 0.21.0 - November 2025 --- diff --git a/lib/api_form.dart b/lib/api_form.dart index ea0bc79b..429c71d5 100644 --- a/lib/api_form.dart +++ b/lib/api_form.dart @@ -1174,8 +1174,8 @@ class APIFormWidgetState extends State { Map submittedData, Map responseData, ) async { - widget.onSuccess?.call(responseData); Navigator.pop(context); + widget.onSuccess?.call(responseData); } List _buildForm() { diff --git a/pubspec.yaml b/pubspec.yaml index a4450354..bf7987f4 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: inventree description: InvenTree stock management -version: 0.21.0+106 +version: 0.21.1+107 environment: sdk: ^3.8.1 @@ -40,7 +40,7 @@ dependencies: path: ^1.9.0 path_provider: ^2.1.5 # Local file storage sembast: ^3.6.0 # NoSQL data storage - sentry_flutter: 8.14.2 # Error reporting + sentry_flutter: 8.14.2 # Error reporting url_launcher: ^6.3.1 # Open link in system browser wakelock_plus: ^1.3.2 # Prevent device from sleeping From 0f31638bdc1e15f68d75e77d0bf54485e36f6d21 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 24 Nov 2025 09:10:59 +1100 Subject: [PATCH 31/40] [CI] Build Fixes (#734) * precache for ios build * build android on push too * try without cache --- .github/workflows/android.yaml | 5 ++++- .github/workflows/ios.yaml | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/android.yaml b/.github/workflows/android.yaml index 9f30b481..31479275 100644 --- a/.github/workflows/android.yaml +++ b/.github/workflows/android.yaml @@ -3,6 +3,9 @@ name: Android on: + pull_request: + branches: + - master push: branches: - master @@ -30,7 +33,7 @@ jobs: with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} - cache: true + cache: false cache-key: "flutter-:os:-:channel:-:version:-:arch:-:hash:" cache-path: "${{ runner.tool_cache }}/flutter/:channel:-:version:-:arch:" pub-cache-key: "flutter-pub:os:-:channel:-:version:-:arch:-:hash:" diff --git a/.github/workflows/ios.yaml b/.github/workflows/ios.yaml index 724fa570..cdd51ed1 100644 --- a/.github/workflows/ios.yaml +++ b/.github/workflows/ios.yaml @@ -3,6 +3,9 @@ name: iOS on: + pull_request: + branches: + - master push: branches: - master @@ -33,7 +36,7 @@ jobs: with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} - cache: true + cache: false cache-key: "flutter-:os:-:channel:-:version:-:arch:-:hash:" cache-path: "${{ runner.tool_cache }}/flutter/:channel:-:version:-:arch:" pub-cache-key: "flutter-pub:os:-:channel:-:version:-:arch:-:hash:" @@ -49,6 +52,7 @@ jobs: dart pub global activate fvm fvm install fvm flutter pub get + fvm flutter precache --ios cd ios pod repo update pod install From bb10117f010baf9563d6d30618be2a11851e4905 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 28 Nov 2025 20:01:55 +1100 Subject: [PATCH 32/40] New Crowdin updates (#736) * New translations app_en.arb (Czech) * New translations app_en.arb (Russian) --- lib/l10n/cs_CZ/app_cs_CZ.arb | 6 ++-- lib/l10n/ru_RU/app_ru_RU.arb | 54 ++++++++++++++++++------------------ 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/lib/l10n/cs_CZ/app_cs_CZ.arb b/lib/l10n/cs_CZ/app_cs_CZ.arb index 51eb3672..ccd9d949 100644 --- a/lib/l10n/cs_CZ/app_cs_CZ.arb +++ b/lib/l10n/cs_CZ/app_cs_CZ.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Skenování čárových kódů pozastaveno", "@barodeScanPaused": {}, - "barcodeScanPause": "Tap to pause scanning", + "barcodeScanPause": "Kliknutím pozastavíte skenování", "@barcodeScanPause": {}, "barcodeScanAssign": "Skenovat pro přiřazení čárového kódu", "@barcodeScanAssign": {}, @@ -472,9 +472,9 @@ "@itemUpdated": {}, "keywords": "Klíčová slova", "@keywords": {}, - "labelDriver": "Label Driver", + "labelDriver": "Ovladač pro popisky", "@labelDriver": {}, - "labelSelectDriver": "Select Label Printer Driver", + "labelSelectDriver": "Vyberte ovladač pro tiskárnu štítků", "@labelSelectDriver": {}, "labelPrinting": "Tisk štítku", "@labelPrinting": {}, diff --git a/lib/l10n/ru_RU/app_ru_RU.arb b/lib/l10n/ru_RU/app_ru_RU.arb index fa9f15bc..8eb938f9 100644 --- a/lib/l10n/ru_RU/app_ru_RU.arb +++ b/lib/l10n/ru_RU/app_ru_RU.arb @@ -46,7 +46,7 @@ "@aspectRatioSquare": {}, "allocateStock": "Выделить запас", "@allocateStock": {}, - "allocatedStock": "Allocated Stock", + "allocatedStock": "Зарезервированные остатки", "@allocatedStock": {}, "appReleaseNotes": "Показать заметки о выпуске приложения", "@appReleaseNotes": {}, @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Сканирование штрих-кода приостановлено", "@barodeScanPaused": {}, - "barcodeScanPause": "Tap to pause scanning", + "barcodeScanPause": "Нажмите, чтобы приостановить сканирование", "@barcodeScanPause": {}, "barcodeScanAssign": "Сканировать для присвоения штрих-кода", "@barcodeScanAssign": {}, @@ -240,7 +240,7 @@ "@deletePartDetail": {}, "deleteSuccess": "Удаление успешно завершено", "@deleteSuccess": {}, - "deliveryDate": "Delivery Date", + "deliveryDate": "Дата доставки", "@deliveryDate": {}, "description": "Описание", "@description": {}, @@ -384,9 +384,9 @@ "@homeShowPo": {}, "homeShowPoDescription": "Показывать кнопку заказа на главном экране", "@homeShowPoDescription": {}, - "homeShowShipments": "Show Shipments", + "homeShowShipments": "Показать отгрузки", "@homeShowShipments": {}, - "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "homeShowShipmentsDescription": "Показывать ожидающие отгрузки на главном экране", "@homeShowShipmentsDescription": {}, "homeShowSo": "Показать заказы на продажу", "@homeShowSo": {}, @@ -454,9 +454,9 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Неверная комбинация имени пользователя и пароля", "@invalidUsernamePassword": {}, - "invoice": "Invoice", + "invoice": "Счет", "@invoice": {}, - "invoiceNumber": "Invoice Number", + "invoiceNumber": "Номер счета", "@invoiceNumber": {}, "issue": "Оформить", "@issue": {}, @@ -472,9 +472,9 @@ "@itemUpdated": {}, "keywords": "Ключевые слова", "@keywords": {}, - "labelDriver": "Label Driver", + "labelDriver": "Драйвер принтера этикеток", "@labelDriver": {}, - "labelSelectDriver": "Select Label Printer Driver", + "labelSelectDriver": "Выберите драйвер принтера этикеток", "@labelSelectDriver": {}, "labelPrinting": "Печать этикеток", "@labelPrinting": {}, @@ -514,7 +514,7 @@ "@locationCreate": {}, "locationCreateDetail": "Создать новое расположение склада", "@locationCreateDetail": {}, - "locationDefault": "Default Location", + "locationDefault": "Расположение по умолчанию", "@locationDefault": {}, "locationNotSet": "Не указано месторасположение", "@locationNotSet": {}, @@ -544,9 +544,9 @@ "@missingData": {}, "name": "Название", "@name": {}, - "no": "No", + "no": "Нет", "@no": {}, - "notApplicable": "N/A", + "notApplicable": "Н/Д", "@notApplicable": {}, "notConnected": "Соединение не установлено", "@notConnected": {}, @@ -660,7 +660,7 @@ "@password": {}, "passwordEmpty": "Пароль не может быть пустым", "@passwordEmpty": {}, - "pending": "Pending", + "pending": "В обработке", "@pending": {}, "permissionAccountDenied": "Ваш аккаунт не имеет разрешения на выполнение этого действия", "@permissionAccountDenied": {}, @@ -940,33 +940,33 @@ "@serverNotConnected": {}, "serverNotSelected": "Сервер не выбран", "@serverNotSelected": {}, - "shipment": "Shipment", + "shipment": "Отгрузка", "@shipment": {}, "shipments": "Поставки", "@shipments": {}, - "shipmentsPending": "Pending Shipments", + "shipmentsPending": "Ожидающие отгрузки", "@shipmentsPending": {}, "shipmentAdd": "Новое Отправление", "@shipmentAdd": {}, - "shipmentCheck": "Check Shipment", + "shipmentCheck": "Проверить отгрузку", "@shipmentCheck": {}, - "shipmentCheckDetail": "Mark this shipment as checked", + "shipmentCheckDetail": "Отметить этот груз как проверенный", "@shipmentCheckDetail": {}, - "shipmentChecked": "Shipment Checked", + "shipmentChecked": "Отгрузка проверена", "@shipmentChecked": {}, - "shipmentDate": "Shipment Date", + "shipmentDate": "Дата отгрузки", "@shipmentDate": {}, - "shipmentEdit": "Edit Shipment", + "shipmentEdit": "Редактировать отгрузку", "@shipmentEdit": {}, - "shipmentReference": "Shipment Reference", + "shipmentReference": "Ссылка на отгрузку", "@shipmentReference": {}, - "shipmentSend": "Send Shipment", + "shipmentSend": "Отправить отгрузку", "@shipmentSend": {}, - "shipmentUncheck": "Uncheck Shipment", + "shipmentUncheck": "Снять отметку с отгрузки", "@shipmentUncheck": {}, - "shipmentUncheckDetail": "Mark this shipment as unchecked", + "shipmentUncheckDetail": "Отметить этот груз как непроверенный", "@shipmentUncheckDetail": {}, - "shipmentUpdated": "Shipment Updated", + "shipmentUpdated": "Отгрузка обновлена", "@shipmentUpdated": {}, "shipped": "Отгружено", "@shipped": {}, @@ -1112,7 +1112,7 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Общая стоимость", "@totalPrice": {}, - "trackingNumber": "Tracking Number", + "trackingNumber": "Номер отслеживания", "@trackingNumber": {}, "transfer": "Перемещение", "@transfer": { @@ -1174,7 +1174,7 @@ "@viewSupplierPart": {}, "website": "Сайт", "@website": {}, - "yes": "Yes", + "yes": "Да", "@yes": {}, "price": "Цена", "@price": {}, From 346b1a150ffc24cddd9131b2d944f6994aa5c472 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 28 Nov 2025 23:53:10 +1100 Subject: [PATCH 33/40] Attachments refactor (#737) * refactor attachment code into its own file * Add getters * Remove custom models for each type of attachment * Refactor existing widgets * Fix double camera open bug * Remove dead code * Remove unused imports * Refactor common code * format * Update release notes --- assets/release_notes.md | 5 + lib/inventree/attachment.dart | 176 ++++++++++++++++++++ lib/inventree/company.dart | 25 --- lib/inventree/model.dart | 170 ------------------- lib/inventree/part.dart | 25 --- lib/inventree/purchase_order.dart | 25 --- lib/inventree/sales_order.dart | 47 +----- lib/inventree/stock.dart | 25 --- lib/widget/attachment_widget.dart | 92 ++++++---- lib/widget/company/company_detail.dart | 49 +++--- lib/widget/order/purchase_order_detail.dart | 58 +++---- lib/widget/order/sales_order_detail.dart | 58 +++---- lib/widget/order/so_shipment_detail.dart | 49 +++--- lib/widget/part/part_detail.dart | 47 +++--- lib/widget/stock/stock_detail.dart | 49 +++--- 15 files changed, 381 insertions(+), 519 deletions(-) create mode 100644 lib/inventree/attachment.dart diff --git a/assets/release_notes.md b/assets/release_notes.md index 17fd96d1..cbde0048 100644 --- a/assets/release_notes.md +++ b/assets/release_notes.md @@ -1,3 +1,8 @@ +### x.xx.x - Month Year +--- + +- Fixes bug which launched camera twice when uploading an attachment + ### 0.21.1 - November 2025 --- diff --git a/lib/inventree/attachment.dart b/lib/inventree/attachment.dart new file mode 100644 index 00000000..3f1b9130 --- /dev/null +++ b/lib/inventree/attachment.dart @@ -0,0 +1,176 @@ +import "dart:io"; + +import "package:flutter/cupertino.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; +import "package:inventree/api.dart"; +import "package:inventree/inventree/model.dart"; +import "package:inventree/inventree/sentry.dart"; +import "package:inventree/l10.dart"; +import "package:inventree/widget/fields.dart"; +import "package:inventree/widget/snacks.dart"; +import "package:path/path.dart" as path; + +class InvenTreeAttachment extends InvenTreeModel { + // Class representing an "attachment" file + InvenTreeAttachment() : super(); + + InvenTreeAttachment.fromJson(Map json) + : super.fromJson(json); + + @override + InvenTreeAttachment createFromJson(Map json) => + InvenTreeAttachment.fromJson(json); + + @override + String get URL => "attachment/"; + + @override + Map> formFields() { + Map> fields = {"link": {}, "comment": {}}; + + if (!hasLink) { + fields.remove("link"); + } + + return fields; + } + + // The model type of the instance this attachment is associated with + String get modelType => getString("model_type"); + + // The ID of the instance this attachment is associated with + int get modelId => getInt("model_id"); + + String get attachment => getString("attachment"); + + bool get hasAttachment => attachment.isNotEmpty; + + // Return the filename of the attachment + String get filename { + return attachment.split("/").last; + } + + IconData get icon { + String fn = filename.toLowerCase(); + + if (fn.endsWith(".pdf")) { + return TablerIcons.file_type_pdf; + } else if (fn.endsWith(".csv")) { + return TablerIcons.file_type_csv; + } else if (fn.endsWith(".doc") || fn.endsWith(".docx")) { + return TablerIcons.file_type_doc; + } else if (fn.endsWith(".xls") || fn.endsWith(".xlsx")) { + return TablerIcons.file_type_xls; + } + + // Image formats + final List img_formats = [".png", ".jpg", ".gif", ".bmp", ".svg"]; + + for (String fmt in img_formats) { + if (fn.endsWith(fmt)) { + return TablerIcons.file_type_jpg; + } + } + + return TablerIcons.file; + } + + String get comment => getString("comment"); + + DateTime? get uploadDate { + if (jsondata.containsKey("upload_date")) { + return DateTime.tryParse((jsondata["upload_date"] ?? "") as String); + } else { + return null; + } + } + + // Return a count of how many attachments exist against the specified model ID + Future countAttachments(String modelType, int modelId) async { + Map filters = {}; + + if (!api.supportsModernAttachments) { + return 0; + } + + filters["model_type"] = modelType; + filters["model_id"] = modelId.toString(); + + return count(filters: filters); + } + + Future uploadAttachment( + File attachment, + String modelType, + int modelId, { + String comment = "", + Map fields = const {}, + }) async { + // Ensure that the correct reference field is set + Map data = Map.from(fields); + + String url = URL; + + if (comment.isNotEmpty) { + data["comment"] = comment; + } + + data["model_type"] = modelType; + data["model_id"] = modelId.toString(); + + final APIResponse response = await InvenTreeAPI().uploadFile( + url, + attachment, + method: "POST", + name: "attachment", + fields: data, + ); + + return response.successful(); + } + + Future uploadImage( + String modelType, + int modelId, { + String prefix = "InvenTree", + }) async { + bool result = false; + + await FilePickerDialog.pickImageFromCamera().then((File? file) { + if (file != null) { + String dir = path.dirname(file.path); + String ext = path.extension(file.path); + String now = DateTime.now().toIso8601String().replaceAll(":", "-"); + + // Rename the file with a unique name + String filename = "${dir}/${prefix}_image_${now}${ext}"; + + try { + return file.rename(filename).then((File renamed) { + return uploadAttachment(renamed, modelType, modelId).then(( + success, + ) { + result = success; + showSnackIcon( + result ? L10().imageUploadSuccess : L10().imageUploadFailure, + success: result, + ); + }); + }); + } catch (error, stackTrace) { + sentryReportError("uploadImage", error, stackTrace); + showSnackIcon(L10().imageUploadFailure, success: false); + } + } + }); + + return result; + } + + /* + * Download this attachment file + */ + Future downloadAttachment() async { + await InvenTreeAPI().downloadFile(attachment); + } +} diff --git a/lib/inventree/company.dart b/lib/inventree/company.dart index a2a3f21d..90ed77c1 100644 --- a/lib/inventree/company.dart +++ b/lib/inventree/company.dart @@ -111,31 +111,6 @@ class InvenTreeCompany extends InvenTreeModel { InvenTreeCompany.fromJson(json); } -/* - * Class representing an attachment file against a Company object - */ -class InvenTreeCompanyAttachment extends InvenTreeAttachment { - InvenTreeCompanyAttachment() : super(); - - InvenTreeCompanyAttachment.fromJson(Map json) - : super.fromJson(json); - - @override - String get REFERENCE_FIELD => "company"; - - @override - String get REF_MODEL_TYPE => "company"; - - @override - String get URL => InvenTreeAPI().supportsModernAttachments - ? "attachment/" - : "company/attachment/"; - - @override - InvenTreeModel createFromJson(Map json) => - InvenTreeCompanyAttachment.fromJson(json); -} - /* * The InvenTreeSupplierPart class represents the SupplierPart model in the InvenTree database */ diff --git a/lib/inventree/model.dart b/lib/inventree/model.dart index e08a053e..f87b2de5 100644 --- a/lib/inventree/model.dart +++ b/lib/inventree/model.dart @@ -1,5 +1,4 @@ import "dart:async"; -import "dart:io"; import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:flutter/material.dart"; @@ -15,7 +14,6 @@ import "package:inventree/helpers.dart"; import "package:inventree/inventree/sentry.dart"; import "package:inventree/widget/dialogs.dart"; -import "package:inventree/widget/fields.dart"; // Paginated response object class InvenTreePageResponse { @@ -934,171 +932,3 @@ class InvenTreeUserSetting extends InvenTreeGlobalSetting { @override String get URL => "settings/user/"; } - -class InvenTreeAttachment extends InvenTreeModel { - // Class representing an "attachment" file - InvenTreeAttachment() : super(); - - InvenTreeAttachment.fromJson(Map json) - : super.fromJson(json); - - @override - String get URL => "attachment/"; - - @override - Map> formFields() { - Map> fields = {"link": {}, "comment": {}}; - - if (!hasLink) { - fields.remove("link"); - } - - return fields; - } - - // Override this reference field for any subclasses - // Note: This is used for the *legacy* attachment API - String get REFERENCE_FIELD => ""; - - // Override this reference field for any subclasses - // Note: This is used for the *modern* attachment API - String get REF_MODEL_TYPE => ""; - - String get attachment => getString("attachment"); - - bool get hasAttachment => attachment.isNotEmpty; - - // Return the filename of the attachment - String get filename { - return attachment.split("/").last; - } - - IconData get icon { - String fn = filename.toLowerCase(); - - if (fn.endsWith(".pdf")) { - return TablerIcons.file_type_pdf; - } else if (fn.endsWith(".csv")) { - return TablerIcons.file_type_csv; - } else if (fn.endsWith(".doc") || fn.endsWith(".docx")) { - return TablerIcons.file_type_doc; - } else if (fn.endsWith(".xls") || fn.endsWith(".xlsx")) { - return TablerIcons.file_type_xls; - } - - // Image formats - final List img_formats = [".png", ".jpg", ".gif", ".bmp", ".svg"]; - - for (String fmt in img_formats) { - if (fn.endsWith(fmt)) { - return TablerIcons.file_type_jpg; - } - } - - return TablerIcons.file; - } - - String get comment => getString("comment"); - - DateTime? get uploadDate { - if (jsondata.containsKey("upload_date")) { - return DateTime.tryParse((jsondata["upload_date"] ?? "") as String); - } else { - return null; - } - } - - // Return a count of how many attachments exist against the specified model ID - Future countAttachments(int modelId) { - Map filters = {}; - - if (InvenTreeAPI().supportsModernAttachments) { - filters["model_type"] = REF_MODEL_TYPE; - filters["model_id"] = modelId.toString(); - } else { - filters[REFERENCE_FIELD] = modelId.toString(); - } - - return count(filters: filters); - } - - Future uploadAttachment( - File attachment, - int modelId, { - String comment = "", - Map fields = const {}, - }) async { - // Ensure that the correct reference field is set - Map data = Map.from(fields); - - String url = URL; - - if (comment.isNotEmpty) { - data["comment"] = comment; - } - - if (InvenTreeAPI().supportsModernAttachments) { - url = "attachment/"; - data["model_id"] = modelId.toString(); - data["model_type"] = REF_MODEL_TYPE; - } else { - if (REFERENCE_FIELD.isEmpty) { - sentryReportMessage( - "uploadAttachment called with empty 'REFERENCE_FIELD'", - ); - return false; - } - - data[REFERENCE_FIELD] = modelId.toString(); - } - - final APIResponse response = await InvenTreeAPI().uploadFile( - url, - attachment, - method: "POST", - name: "attachment", - fields: data, - ); - - return response.successful(); - } - - Future uploadImage(int modelId, {String prefix = "InvenTree"}) async { - bool result = false; - - await FilePickerDialog.pickImageFromCamera().then((File? file) { - if (file != null) { - String dir = path.dirname(file.path); - String ext = path.extension(file.path); - String now = DateTime.now().toIso8601String().replaceAll(":", "-"); - - // Rename the file with a unique name - String filename = "${dir}/${prefix}_image_${now}${ext}"; - - try { - file.rename(filename).then((File renamed) { - uploadAttachment(renamed, modelId).then((success) { - result = success; - showSnackIcon( - result ? L10().imageUploadSuccess : L10().imageUploadFailure, - success: result, - ); - }); - }); - } catch (error, stackTrace) { - sentryReportError("uploadImage", error, stackTrace); - showSnackIcon(L10().imageUploadFailure, success: false); - } - } - }); - - return result; - } - - /* - * Download this attachment file - */ - Future downloadAttachment() async { - await InvenTreeAPI().downloadFile(attachment); - } -} diff --git a/lib/inventree/part.dart b/lib/inventree/part.dart index 23e306c1..fc523992 100644 --- a/lib/inventree/part.dart +++ b/lib/inventree/part.dart @@ -547,28 +547,3 @@ class InvenTreePartPricing extends InvenTreeModel { double? get saleHistoryMin => getDoubleOrNull("sale_history_min"); double? get saleHistoryMax => getDoubleOrNull("sale_history_max"); } - -/* - * Class representing an attachment file against a Part object - */ -class InvenTreePartAttachment extends InvenTreeAttachment { - InvenTreePartAttachment() : super(); - - InvenTreePartAttachment.fromJson(Map json) - : super.fromJson(json); - - @override - String get REFERENCE_FIELD => "part"; - - @override - String get REF_MODEL_TYPE => "part"; - - @override - String get URL => InvenTreeAPI().supportsModernAttachments - ? "attachment/" - : "part/attachment/"; - - @override - InvenTreeModel createFromJson(Map json) => - InvenTreePartAttachment.fromJson(json); -} diff --git a/lib/inventree/purchase_order.dart b/lib/inventree/purchase_order.dart index 59874dc1..65af3610 100644 --- a/lib/inventree/purchase_order.dart +++ b/lib/inventree/purchase_order.dart @@ -336,28 +336,3 @@ class InvenTreePOExtraLineItem extends InvenTreeExtraLineItem { ); } } - -/* - * Class representing an attachment file against a PurchaseOrder object - */ -class InvenTreePurchaseOrderAttachment extends InvenTreeAttachment { - InvenTreePurchaseOrderAttachment() : super(); - - InvenTreePurchaseOrderAttachment.fromJson(Map json) - : super.fromJson(json); - - @override - String get REFERENCE_FIELD => "order"; - - @override - String get REF_MODEL_TYPE => "purchaseorder"; - - @override - String get URL => InvenTreeAPI().supportsModernAttachments - ? "attachment/" - : "order/po/attachment/"; - - @override - InvenTreeModel createFromJson(Map json) => - InvenTreePurchaseOrderAttachment.fromJson(json); -} diff --git a/lib/inventree/sales_order.dart b/lib/inventree/sales_order.dart index 8b661f4a..77c3469d 100644 --- a/lib/inventree/sales_order.dart +++ b/lib/inventree/sales_order.dart @@ -334,7 +334,7 @@ class InvenTreeSalesOrderShipment extends InvenTreeModel { /* * Class representing an allocation of stock against a SalesOrderShipment */ -class InvenTreeSalesOrderAllocation extends InvenTreeAttachment { +class InvenTreeSalesOrderAllocation extends InvenTreeModel { InvenTreeSalesOrderAllocation() : super(); InvenTreeSalesOrderAllocation.fromJson(Map json) @@ -428,48 +428,3 @@ class InvenTreeSalesOrderAllocation extends InvenTreeAttachment { } } } - -/* - * Class representing an attachment file against a SalesOrder object - */ -class InvenTreeSalesOrderAttachment extends InvenTreeAttachment { - InvenTreeSalesOrderAttachment() : super(); - - InvenTreeSalesOrderAttachment.fromJson(Map json) - : super.fromJson(json); - - @override - InvenTreeModel createFromJson(Map json) => - InvenTreeSalesOrderAttachment.fromJson(json); - - @override - String get REFERENCE_FIELD => "order"; - - @override - String get REF_MODEL_TYPE => "salesorder"; - - @override - String get URL => InvenTreeAPI().supportsModernAttachments - ? "attachment/" - : "order/so/attachment/"; -} - -class InvenTreeSalesOrderShipmentAttachment extends InvenTreeAttachment { - InvenTreeSalesOrderShipmentAttachment() : super(); - - InvenTreeSalesOrderShipmentAttachment.fromJson(Map json) - : super.fromJson(json); - - @override - InvenTreeModel createFromJson(Map json) => - InvenTreeSalesOrderShipmentAttachment.fromJson(json); - - @override - String get REFERENCE_FIELD => "shipment"; - - @override - String get REF_MODEL_TYPE => "salesordershipment"; - - @override - String get URL => "attachment/"; -} diff --git a/lib/inventree/stock.dart b/lib/inventree/stock.dart index 1a45e73e..4b5bf3b0 100644 --- a/lib/inventree/stock.dart +++ b/lib/inventree/stock.dart @@ -575,31 +575,6 @@ class InvenTreeStockItem extends InvenTreeModel { } } -/* - * Class representing an attachment file against a StockItem object - */ -class InvenTreeStockItemAttachment extends InvenTreeAttachment { - InvenTreeStockItemAttachment() : super(); - - InvenTreeStockItemAttachment.fromJson(Map json) - : super.fromJson(json); - - @override - String get REFERENCE_FIELD => "stock_item"; - - @override - String get REF_MODEL_TYPE => "stockitem"; - - @override - String get URL => InvenTreeAPI().supportsModernAttachments - ? "attachment/" - : "stock/attachment/"; - - @override - InvenTreeModel createFromJson(Map json) => - InvenTreeStockItemAttachment.fromJson(json); -} - class InvenTreeStockLocation extends InvenTreeModel { InvenTreeStockLocation() : super(); diff --git a/lib/widget/attachment_widget.dart b/lib/widget/attachment_widget.dart index b66462f3..721909d9 100644 --- a/lib/widget/attachment_widget.dart +++ b/lib/widget/attachment_widget.dart @@ -2,14 +2,13 @@ import "dart:io"; import "package:flutter/material.dart"; import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; +import "package:inventree/api.dart"; +import "package:inventree/inventree/attachment.dart"; +import "package:inventree/widget/link_icon.dart"; import "package:one_context/one_context.dart"; -import "package:inventree/api.dart"; import "package:inventree/l10.dart"; import "package:inventree/app_colors.dart"; - -import "package:inventree/inventree/model.dart"; - import "package:inventree/widget/fields.dart"; import "package:inventree/widget/progress.dart"; import "package:inventree/widget/snacks.dart"; @@ -23,13 +22,13 @@ import "package:inventree/widget/refreshable_state.dart"; */ class AttachmentWidget extends StatefulWidget { const AttachmentWidget( - this.attachmentClass, + this.modelType, this.modelId, this.imagePrefix, this.hasUploadPermission, ) : super(); - final InvenTreeAttachment attachmentClass; + final String modelType; final int modelId; final bool hasUploadPermission; final String imagePrefix; @@ -54,15 +53,15 @@ class _AttachmentWidgetState extends RefreshableState { IconButton( icon: Icon(TablerIcons.camera), onPressed: () async { - widget.attachmentClass.uploadImage( - widget.modelId, - prefix: widget.imagePrefix, - ); - FilePickerDialog.pickImageFromCamera().then((File? file) { - upload(context, file).then((_) { - refresh(context); - }); - }); + InvenTreeAttachment() + .uploadImage( + widget.modelType, + widget.modelId, + prefix: widget.imagePrefix, + ) + .then((_) { + refresh(context); + }); }, ), IconButton( @@ -83,8 +82,9 @@ class _AttachmentWidgetState extends RefreshableState { showLoadingOverlay(); - final bool result = await widget.attachmentClass.uploadAttachment( + final bool result = await InvenTreeAttachment().uploadAttachment( file, + widget.modelType, widget.modelId, ); @@ -168,25 +168,24 @@ class _AttachmentWidgetState extends RefreshableState { Future request(BuildContext context) async { Map filters = {}; - if (InvenTreeAPI().supportsModernAttachments) { - filters["model_type"] = widget.attachmentClass.REF_MODEL_TYPE; - filters["model_id"] = widget.modelId.toString(); - } else { - filters[widget.attachmentClass.REFERENCE_FIELD] = widget.modelId - .toString(); - } + filters["model_type"] = widget.modelType; + filters["model_id"] = widget.modelId.toString(); - await widget.attachmentClass.list(filters: filters).then((var results) { - attachments.clear(); + List _attachments = []; + InvenTreeAttachment().list(filters: filters).then((var results) { for (var result in results) { if (result is InvenTreeAttachment) { - attachments.add(result); + _attachments.add(result); } } - }); - setState(() {}); + if (mounted) { + setState(() { + attachments = _attachments; + }); + } + }); } @override @@ -240,3 +239,40 @@ class _AttachmentWidgetState extends RefreshableState { return tiles; } } + +/* + * Return a ListTile to display attachments for the specified model + */ +ListTile? ShowAttachmentsItem( + BuildContext context, + String modelType, + int modelId, + String imagePrefix, + int attachmentCount, + bool hasUploadPermission, +) { + if (!InvenTreeAPI().supportsModernAttachments) { + return null; + } + + return ListTile( + title: Text(L10().attachments), + leading: Icon(TablerIcons.file, color: COLOR_ACTION), + trailing: LinkIcon( + text: attachmentCount > 0 ? attachmentCount.toString() : null, + ), + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => AttachmentWidget( + modelType, + modelId, + imagePrefix, + hasUploadPermission, + ), + ), + ); + }, + ); +} diff --git a/lib/widget/company/company_detail.dart b/lib/widget/company/company_detail.dart index 5d06e581..8947104b 100644 --- a/lib/widget/company/company_detail.dart +++ b/lib/widget/company/company_detail.dart @@ -1,6 +1,7 @@ import "package:flutter/material.dart"; import "package:flutter_speed_dial/flutter_speed_dial.dart"; import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; +import "package:inventree/inventree/attachment.dart"; import "package:inventree/l10.dart"; import "package:inventree/api.dart"; @@ -184,15 +185,15 @@ class _CompanyDetailState extends RefreshableState { } }); - InvenTreeCompanyAttachment().countAttachments(widget.company.pk).then(( - value, - ) { - if (mounted) { - setState(() { - attachmentCount = value; + InvenTreeAttachment() + .countAttachments(InvenTreeCompany.MODEL_TYPE, widget.company.pk) + .then((value) { + if (mounted) { + setState(() { + attachmentCount = value; + }); + } }); - } - }); } Future editCompany(BuildContext context) async { @@ -393,29 +394,19 @@ class _CompanyDetailState extends RefreshableState { ); } - tiles.add( - ListTile( - title: Text(L10().attachments), - leading: Icon(TablerIcons.file, color: COLOR_ACTION), - trailing: LinkIcon( - text: attachmentCount > 0 ? attachmentCount.toString() : null, - ), - onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => AttachmentWidget( - InvenTreeCompanyAttachment(), - widget.company.pk, - widget.company.name, - InvenTreeCompany().canEdit, - ), - ), - ); - }, - ), + ListTile? attachmentTile = ShowAttachmentsItem( + context, + InvenTreeCompany.MODEL_TYPE, + widget.company.pk, + widget.company.name, + attachmentCount, + widget.company.canEdit, ); + if (attachmentTile != null) { + tiles.add(attachmentTile); + } + return tiles; } } diff --git a/lib/widget/order/purchase_order_detail.dart b/lib/widget/order/purchase_order_detail.dart index 4201cd36..0829e06c 100644 --- a/lib/widget/order/purchase_order_detail.dart +++ b/lib/widget/order/purchase_order_detail.dart @@ -7,6 +7,7 @@ import "package:inventree/app_colors.dart"; import "package:inventree/barcode/barcode.dart"; import "package:inventree/barcode/purchase_order.dart"; import "package:inventree/helpers.dart"; +import "package:inventree/inventree/attachment.dart"; import "package:inventree/l10.dart"; import "package:inventree/inventree/model.dart"; @@ -174,8 +175,12 @@ class _PurchaseOrderDetailState /// Upload an image against the current PurchaseOrder Future _uploadImage(BuildContext context) async { - InvenTreePurchaseOrderAttachment() - .uploadImage(widget.order.pk, prefix: widget.order.reference) + InvenTreeAttachment() + .uploadImage( + InvenTreePurchaseOrder.MODEL_TYPE, + widget.order.pk, + prefix: widget.order.reference, + ) .then((result) => refresh(context)); } @@ -295,15 +300,15 @@ class _PurchaseOrderDetailState } } - InvenTreePurchaseOrderAttachment().countAttachments(widget.order.pk).then(( - int value, - ) { - if (mounted) { - setState(() { - attachmentCount = value; + InvenTreeAttachment() + .countAttachments(InvenTreePurchaseOrder.MODEL_TYPE, widget.order.pk) + .then((int value) { + if (mounted) { + setState(() { + attachmentCount = value; + }); + } }); - } - }); if (api.supportsPurchaseOrderDestination && widget.order.destinationId > 0) { @@ -565,30 +570,19 @@ class _PurchaseOrderDetailState ), ); - // Attachments - tiles.add( - ListTile( - title: Text(L10().attachments), - leading: Icon(TablerIcons.file, color: COLOR_ACTION), - trailing: LinkIcon( - text: attachmentCount > 0 ? attachmentCount.toString() : null, - ), - onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => AttachmentWidget( - InvenTreePurchaseOrderAttachment(), - widget.order.pk, - widget.order.reference, - widget.order.canEdit, - ), - ), - ); - }, - ), + ListTile? attachmentTile = ShowAttachmentsItem( + context, + InvenTreePurchaseOrder.MODEL_TYPE, + widget.order.pk, + widget.order.reference, + attachmentCount, + widget.order.canEdit, ); + if (attachmentTile != null) { + tiles.add(attachmentTile); + } + return tiles; } diff --git a/lib/widget/order/sales_order_detail.dart b/lib/widget/order/sales_order_detail.dart index ec18561c..30692f2b 100644 --- a/lib/widget/order/sales_order_detail.dart +++ b/lib/widget/order/sales_order_detail.dart @@ -3,6 +3,7 @@ import "package:flutter_speed_dial/flutter_speed_dial.dart"; import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/barcode/barcode.dart"; import "package:inventree/barcode/sales_order.dart"; +import "package:inventree/inventree/attachment.dart"; import "package:inventree/inventree/company.dart"; import "package:inventree/inventree/sales_order.dart"; import "package:inventree/preferences.dart"; @@ -108,8 +109,12 @@ class _SalesOrderDetailState extends RefreshableState { /// Upload an image for this order Future _uploadImage(BuildContext context) async { - InvenTreeSalesOrderAttachment() - .uploadImage(widget.order.pk, prefix: widget.order.reference) + InvenTreeAttachment() + .uploadImage( + InvenTreeSalesOrder.MODEL_TYPE, + widget.order.pk, + prefix: widget.order.reference, + ) .then((result) => refresh(context)); } @@ -266,15 +271,15 @@ class _SalesOrderDetailState extends RefreshableState { true, ); - InvenTreeSalesOrderAttachment().countAttachments(widget.order.pk).then(( - int value, - ) { - if (mounted) { - setState(() { - attachmentCount = value; + InvenTreeAttachment() + .countAttachments(InvenTreeSalesOrder.MODEL_TYPE, widget.order.pk) + .then((int value) { + if (mounted) { + setState(() { + attachmentCount = value; + }); + } }); - } - }); // Count number of "extra line items" against this order InvenTreeSOExtraLineItem() @@ -492,30 +497,19 @@ class _SalesOrderDetailState extends RefreshableState { ), ); - // Attachments - tiles.add( - ListTile( - title: Text(L10().attachments), - leading: Icon(TablerIcons.file, color: COLOR_ACTION), - trailing: LinkIcon( - text: attachmentCount > 0 ? attachmentCount.toString() : null, - ), - onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => AttachmentWidget( - InvenTreeSalesOrderAttachment(), - widget.order.pk, - widget.order.reference, - widget.order.canEdit, - ), - ), - ); - }, - ), + ListTile? attachmentTile = ShowAttachmentsItem( + context, + InvenTreeSalesOrder.MODEL_TYPE, + widget.order.pk, + widget.order.reference, + attachmentCount, + widget.order.canEdit, ); + if (attachmentTile != null) { + tiles.add(attachmentTile); + } + return tiles; } diff --git a/lib/widget/order/so_shipment_detail.dart b/lib/widget/order/so_shipment_detail.dart index 9116fb7f..34984dfd 100644 --- a/lib/widget/order/so_shipment_detail.dart +++ b/lib/widget/order/so_shipment_detail.dart @@ -8,6 +8,7 @@ import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/api.dart"; import "package:inventree/api_form.dart"; import "package:inventree/app_colors.dart"; +import "package:inventree/inventree/attachment.dart"; import "package:inventree/inventree/sales_order.dart"; import "package:inventree/l10.dart"; import "package:inventree/preferences.dart"; @@ -91,8 +92,11 @@ class _SOShipmentDetailWidgetState }); } - InvenTreeSalesOrderShipmentAttachment() - .countAttachments(widget.shipment.pk) + InvenTreeAttachment() + .countAttachments( + InvenTreeSalesOrderShipment.MODEL_TYPE, + widget.shipment.pk, + ) .then((int value) { if (mounted) { setState(() { @@ -104,8 +108,12 @@ class _SOShipmentDetailWidgetState /// Upload an image for this shipment Future _uploadImage(BuildContext context) async { - InvenTreeSalesOrderShipmentAttachment() - .uploadImage(widget.shipment.pk, prefix: widget.shipment.reference) + InvenTreeAttachment() + .uploadImage( + InvenTreeSalesOrderShipment.MODEL_TYPE, + widget.shipment.pk, + prefix: widget.shipment.reference, + ) .then((result) => refresh(context)); } @@ -339,30 +347,19 @@ class _SOShipmentDetailWidgetState ), ); - // Attachments - tiles.add( - ListTile( - title: Text(L10().attachments), - leading: Icon(TablerIcons.file, color: COLOR_ACTION), - trailing: LinkIcon( - text: attachmentCount > 0 ? attachmentCount.toString() : null, - ), - onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => AttachmentWidget( - InvenTreeSalesOrderShipmentAttachment(), - widget.shipment.pk, - widget.shipment.reference, - widget.shipment.canEdit, - ), - ), - ); - }, - ), + ListTile? attachmentTile = ShowAttachmentsItem( + context, + InvenTreeSalesOrderShipment.MODEL_TYPE, + widget.shipment.pk, + widget.shipment.reference, + attachmentCount, + widget.shipment.canEdit, ); + if (attachmentTile != null) { + tiles.add(attachmentTile); + } + return tiles; } diff --git a/lib/widget/part/part_detail.dart b/lib/widget/part/part_detail.dart index 98cf1737..30b697c4 100644 --- a/lib/widget/part/part_detail.dart +++ b/lib/widget/part/part_detail.dart @@ -4,6 +4,7 @@ import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/app_colors.dart"; import "package:inventree/barcode/barcode.dart"; +import "package:inventree/inventree/attachment.dart"; import "package:inventree/l10.dart"; import "package:inventree/helpers.dart"; @@ -212,13 +213,15 @@ class _PartDisplayState extends RefreshableState { } // Request the number of attachments - InvenTreePartAttachment().countAttachments(part.pk).then((int value) { - if (mounted) { - setState(() { - attachmentCount = value; + InvenTreeAttachment() + .countAttachments(InvenTreePart.MODEL_TYPE, part.pk) + .then((int value) { + if (mounted) { + setState(() { + attachmentCount = value; + }); + } }); - } - }); // If show pricing information? if (showPricing) { @@ -596,29 +599,19 @@ class _PartDisplayState extends RefreshableState { ), ); - tiles.add( - ListTile( - title: Text(L10().attachments), - leading: Icon(TablerIcons.file, color: COLOR_ACTION), - trailing: LinkIcon( - text: attachmentCount > 0 ? attachmentCount.toString() : null, - ), - onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => AttachmentWidget( - InvenTreePartAttachment(), - part.pk, - L10().part, - part.canEdit, - ), - ), - ); - }, - ), + ListTile? attachmentTile = ShowAttachmentsItem( + context, + InvenTreePart.MODEL_TYPE, + part.pk, + L10().part, + attachmentCount, + part.canEdit, ); + if (attachmentTile != null) { + tiles.add(attachmentTile); + } + return tiles; } diff --git a/lib/widget/stock/stock_detail.dart b/lib/widget/stock/stock_detail.dart index db295cac..282a9627 100644 --- a/lib/widget/stock/stock_detail.dart +++ b/lib/widget/stock/stock_detail.dart @@ -7,6 +7,7 @@ import "package:inventree/app_colors.dart"; import "package:inventree/barcode/barcode.dart"; import "package:inventree/barcode/stock.dart"; import "package:inventree/helpers.dart"; +import "package:inventree/inventree/attachment.dart"; import "package:inventree/inventree/sales_order.dart"; import "package:inventree/l10.dart"; import "package:inventree/api.dart"; @@ -255,15 +256,15 @@ class _StockItemDisplayState extends RefreshableState { } // Request the number of attachments - InvenTreeStockItemAttachment().countAttachments(widget.item.pk).then(( - int value, - ) { - if (mounted) { - setState(() { - attachmentCount = value; + InvenTreeAttachment() + .countAttachments(InvenTreeStockItem.MODEL_TYPE, widget.item.pk) + .then((int value) { + if (mounted) { + setState(() { + attachmentCount = value; + }); + } }); - } - }); // Request SalesOrder information if (widget.item.hasSalesOrder) { @@ -837,29 +838,19 @@ class _StockItemDisplayState extends RefreshableState { ), ); - tiles.add( - ListTile( - title: Text(L10().attachments), - leading: Icon(TablerIcons.file, color: COLOR_ACTION), - trailing: LinkIcon( - text: attachmentCount > 0 ? attachmentCount.toString() : null, - ), - onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => AttachmentWidget( - InvenTreeStockItemAttachment(), - widget.item.pk, - L10().stockItem, - widget.item.canEdit, - ), - ), - ); - }, - ), + ListTile? attachmentTile = ShowAttachmentsItem( + context, + InvenTreeStockItem.MODEL_TYPE, + widget.item.pk, + L10().stockItem, + attachmentCount, + widget.item.canEdit, ); + if (attachmentTile != null) { + tiles.add(attachmentTile); + } + return tiles; } } From 864c3eea76c2303e285b043e8a58c363b32a6d6d Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 4 Dec 2025 18:34:05 +1100 Subject: [PATCH 34/40] Parameters refactor (#738) * refactor attachment code into its own file * Add getters * Remove custom models for each type of attachment * Refactor existing widgets * Fix double camera open bug * Add check for modern parameter API * Add generic parameter type * Remove old code * Remove dead code * Refactor previous widget * Remove unused imports * Refactor common code * format * Update release notes * Helper func to render parameters list tile * Display parameters on part page * parameters for company * Supplier more model types: - ManufacturerPart - SupplierPart - PurchaseOrder - SalesOrder * dart format * Fix image prefix * Remove unused import * Adjust API version --- lib/api.dart | 4 + lib/inventree/parameter.dart | 77 ++++++++++++++++++ lib/inventree/part.dart | 62 --------------- lib/preferences.dart | 1 - lib/settings/part_settings.dart | 22 ------ lib/widget/company/company_detail.dart | 25 ++++++ .../company/manufacturer_part_detail.dart | 64 +++++++++++++-- lib/widget/company/supplier_part_detail.dart | 59 ++++++++++++++ lib/widget/order/purchase_order_detail.dart | 25 ++++++ lib/widget/order/sales_order_detail.dart | 25 ++++++ ...eter_widget.dart => parameter_widget.dart} | 78 +++++++++++++++---- lib/widget/part/part_detail.dart | 65 +++++++++------- 12 files changed, 378 insertions(+), 129 deletions(-) create mode 100644 lib/inventree/parameter.dart rename lib/widget/{part/part_parameter_widget.dart => parameter_widget.dart} (58%) diff --git a/lib/api.dart b/lib/api.dart index 1d24b397..61a63798 100644 --- a/lib/api.dart +++ b/lib/api.dart @@ -353,6 +353,10 @@ class InvenTreeAPI { // Supports separate search against "supplier" / "customer" / "manufacturer" bool get supportsSplitCompanySearch => apiVersion >= 315; + // Does the server support the "modern" (consolidated) parameter API? + // Ref: https://github.com/inventree/InvenTree/pull/10699 + bool get supportsModernParameters => apiVersion >= 429; + // Cached list of plugins (refreshed when we connect to the server) List _plugins = []; diff --git a/lib/inventree/parameter.dart b/lib/inventree/parameter.dart new file mode 100644 index 00000000..22006d78 --- /dev/null +++ b/lib/inventree/parameter.dart @@ -0,0 +1,77 @@ +import "package:inventree/inventree/model.dart"; + +class InvenTreeParameter extends InvenTreeModel { + InvenTreeParameter() : super(); + + InvenTreeParameter.fromJson(Map json) : super.fromJson(json); + + @override + InvenTreeParameter createFromJson(Map json) => + InvenTreeParameter.fromJson(json); + + @override + String get URL => "parameter/"; + + @override + Map> formFields() { + Map> fields = { + "header": { + "type": "string", + "read_only": true, + "label": name, + "help_text": description, + "value": "", + }, + "data": {"type": "string"}, + "note": {}, + }; + + return fields; + } + + @override + String get name => getString("name", subKey: "template_detail"); + + @override + String get description => getString("description", subKey: "template_detail"); + + String get value => getString("data"); + + String get valueString { + String v = value; + + if (units.isNotEmpty) { + v += " "; + v += units; + } + + return v; + } + + bool get as_bool => value.toLowerCase() == "true"; + + String get units => getString("units", subKey: "template_detail"); + + bool get is_checkbox => + getBool("checkbox", subKey: "template_detail", backup: false); + + // The model type of the instance this attachment is associated with + String get modelType => getString("model_type"); + + // The ID of the instance this attachment is associated with + int get modelId => getInt("model_id"); + + // Return a count of how many parameters exist against the specified model ID + Future countParameters(String modelType, int modelId) async { + Map filters = {}; + + if (!api.supportsModernParameters) { + return 0; + } + + filters["model_type"] = modelType; + filters["model_id"] = modelId.toString(); + + return count(filters: filters); + } +} diff --git a/lib/inventree/part.dart b/lib/inventree/part.dart index fc523992..033fae99 100644 --- a/lib/inventree/part.dart +++ b/lib/inventree/part.dart @@ -132,68 +132,6 @@ class InvenTreePartTestTemplate extends InvenTreeModel { } } -/* - Class representing the PartParameter database model - */ -class InvenTreePartParameter extends InvenTreeModel { - InvenTreePartParameter() : super(); - - InvenTreePartParameter.fromJson(Map json) - : super.fromJson(json); - - @override - String get URL => "part/parameter/"; - - @override - List get rolesRequired => ["part"]; - - @override - InvenTreeModel createFromJson(Map json) => - InvenTreePartParameter.fromJson(json); - - @override - Map> formFields() { - Map> fields = { - "header": { - "type": "string", - "read_only": true, - "label": name, - "help_text": description, - "value": "", - }, - "data": {"type": "string"}, - }; - - return fields; - } - - @override - String get name => getString("name", subKey: "template_detail"); - - @override - String get description => getString("description", subKey: "template_detail"); - - String get value => getString("data"); - - String get valueString { - String v = value; - - if (units.isNotEmpty) { - v += " "; - v += units; - } - - return v; - } - - bool get as_bool => value.toLowerCase() == "true"; - - String get units => getString("units", subKey: "template_detail"); - - bool get is_checkbox => - getBool("checkbox", subKey: "template_detail", backup: false); -} - /* * Class representing the Part database model */ diff --git a/lib/preferences.dart b/lib/preferences.dart index de7bb0f0..92eda1fe 100644 --- a/lib/preferences.dart +++ b/lib/preferences.dart @@ -32,7 +32,6 @@ const String INV_LABEL_DEFAULT_PRINTER = "defaultLabelPrinter"; const String INV_LABEL_DEFAULT_PLUGIN = "defaultLabelPlugin"; // Part settings -const String INV_PART_SHOW_PARAMETERS = "partShowParameters"; const String INV_PART_SHOW_BOM = "partShowBom"; const String INV_PART_SHOW_PRICING = "partShowPricing"; diff --git a/lib/settings/part_settings.dart b/lib/settings/part_settings.dart index b0919316..aa136782 100644 --- a/lib/settings/part_settings.dart +++ b/lib/settings/part_settings.dart @@ -13,7 +13,6 @@ class InvenTreePartSettingsWidget extends StatefulWidget { class _InvenTreePartSettingsState extends State { _InvenTreePartSettingsState(); - bool partShowParameters = true; bool partShowBom = true; bool partShowPricing = true; bool stockShowHistory = false; @@ -28,10 +27,6 @@ class _InvenTreePartSettingsState extends State { } Future loadSettings() async { - partShowParameters = await InvenTreeSettingsManager().getBool( - INV_PART_SHOW_PARAMETERS, - true, - ); partShowBom = await InvenTreeSettingsManager().getBool( INV_PART_SHOW_BOM, true, @@ -68,23 +63,6 @@ class _InvenTreePartSettingsState extends State { body: Container( child: ListView( children: [ - ListTile( - title: Text(L10().parameters), - subtitle: Text(L10().parametersSettingDetail), - leading: Icon(TablerIcons.list), - trailing: Switch( - value: partShowParameters, - onChanged: (bool value) { - InvenTreeSettingsManager().setValue( - INV_PART_SHOW_PARAMETERS, - value, - ); - setState(() { - partShowParameters = value; - }); - }, - ), - ), ListTile( title: Text(L10().bom), subtitle: Text(L10().bomEnable), diff --git a/lib/widget/company/company_detail.dart b/lib/widget/company/company_detail.dart index 8947104b..9a6d233f 100644 --- a/lib/widget/company/company_detail.dart +++ b/lib/widget/company/company_detail.dart @@ -2,6 +2,7 @@ import "package:flutter/material.dart"; import "package:flutter_speed_dial/flutter_speed_dial.dart"; import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/inventree/attachment.dart"; +import "package:inventree/inventree/parameter.dart"; import "package:inventree/l10.dart"; import "package:inventree/api.dart"; @@ -14,6 +15,7 @@ import "package:inventree/widget/attachment_widget.dart"; import "package:inventree/widget/link_icon.dart"; import "package:inventree/widget/order/purchase_order_list.dart"; import "package:inventree/widget/order/sales_order_list.dart"; +import "package:inventree/widget/parameter_widget.dart"; import "package:inventree/widget/refreshable_state.dart"; import "package:inventree/widget/snacks.dart"; import "package:inventree/widget/company/supplier_part_list.dart"; @@ -38,6 +40,7 @@ class _CompanyDetailState extends RefreshableState { int outstandingPurchaseOrders = 0; int outstandingSalesOrders = 0; + int parameterCount = 0; int attachmentCount = 0; @override @@ -185,6 +188,16 @@ class _CompanyDetailState extends RefreshableState { } }); + InvenTreeParameter() + .countParameters(InvenTreeCompany.MODEL_TYPE, widget.company.pk) + .then((value) { + if (mounted) { + setState(() { + parameterCount = value; + }); + } + }); + InvenTreeAttachment() .countAttachments(InvenTreeCompany.MODEL_TYPE, widget.company.pk) .then((value) { @@ -394,6 +407,18 @@ class _CompanyDetailState extends RefreshableState { ); } + ListTile? parameterTile = ShowParametersItem( + context, + InvenTreeCompany.MODEL_TYPE, + widget.company.pk, + parameterCount, + widget.company.canEdit, + ); + + if (parameterTile != null) { + tiles.add(parameterTile); + } + ListTile? attachmentTile = ShowAttachmentsItem( context, InvenTreeCompany.MODEL_TYPE, diff --git a/lib/widget/company/manufacturer_part_detail.dart b/lib/widget/company/manufacturer_part_detail.dart index 9cc6bc23..57a7e48f 100644 --- a/lib/widget/company/manufacturer_part_detail.dart +++ b/lib/widget/company/manufacturer_part_detail.dart @@ -1,6 +1,8 @@ import "package:flutter/material.dart"; import "package:flutter_speed_dial/flutter_speed_dial.dart"; import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; +import "package:inventree/inventree/attachment.dart"; +import "package:inventree/inventree/parameter.dart"; import "package:inventree/l10.dart"; import "package:inventree/api.dart"; @@ -8,6 +10,8 @@ import "package:inventree/app_colors.dart"; import "package:inventree/inventree/company.dart"; import "package:inventree/inventree/part.dart"; +import "package:inventree/widget/attachment_widget.dart"; +import "package:inventree/widget/parameter_widget.dart"; import "package:inventree/widget/refreshable_state.dart"; import "package:inventree/widget/snacks.dart"; @@ -31,6 +35,9 @@ class _ManufacturerPartDisplayState extends RefreshableState { _ManufacturerPartDisplayState(); + int parameterCount = 0; + int attachmentCount = 0; + @override String getAppBarTitle() => L10().manufacturerPart; @@ -42,7 +49,34 @@ class _ManufacturerPartDisplayState if (!result) { Navigator.of(context).pop(); + return; } + + InvenTreeParameter() + .countParameters( + InvenTreeManufacturerPart.MODEL_TYPE, + widget.manufacturerPart.pk, + ) + .then((value) { + if (mounted) { + setState(() { + parameterCount = value; + }); + } + }); + + InvenTreeAttachment() + .countAttachments( + InvenTreeManufacturerPart.MODEL_TYPE, + widget.manufacturerPart.pk, + ) + .then((value) { + if (mounted) { + setState(() { + attachmentCount = value; + }); + } + }); } Future editManufacturerPart(BuildContext context) async { @@ -91,11 +125,6 @@ class _ManufacturerPartDisplayState List getTiles(BuildContext context) { List tiles = []; - if (loading) { - tiles.add(progressIndicator()); - return tiles; - } - // Internal Part tiles.add( ListTile( @@ -174,6 +203,31 @@ class _ManufacturerPartDisplayState ); } + ListTile? parameterTile = ShowParametersItem( + context, + InvenTreeManufacturerPart.MODEL_TYPE, + widget.manufacturerPart.pk, + parameterCount, + widget.manufacturerPart.canEdit, + ); + + if (parameterTile != null) { + tiles.add(parameterTile); + } + + ListTile? attachmentTile = ShowAttachmentsItem( + context, + InvenTreeManufacturerPart.MODEL_TYPE, + widget.manufacturerPart.pk, + widget.manufacturerPart.MPN, + attachmentCount, + widget.manufacturerPart.canEdit, + ); + + if (attachmentTile != null) { + tiles.add(attachmentTile); + } + return tiles; } } diff --git a/lib/widget/company/supplier_part_detail.dart b/lib/widget/company/supplier_part_detail.dart index 77e29ab4..ed607483 100644 --- a/lib/widget/company/supplier_part_detail.dart +++ b/lib/widget/company/supplier_part_detail.dart @@ -2,6 +2,9 @@ import "package:flutter/material.dart"; import "package:flutter_speed_dial/flutter_speed_dial.dart"; import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/helpers.dart"; +import "package:inventree/inventree/attachment.dart"; +import "package:inventree/inventree/parameter.dart"; +import "package:inventree/widget/attachment_widget.dart"; import "package:inventree/widget/link_icon.dart"; import "package:inventree/app_colors.dart"; @@ -11,6 +14,7 @@ import "package:inventree/barcode/barcode.dart"; import "package:inventree/inventree/part.dart"; import "package:inventree/inventree/company.dart"; +import "package:inventree/widget/parameter_widget.dart"; import "package:inventree/widget/progress.dart"; import "package:inventree/widget/refreshable_state.dart"; @@ -35,6 +39,9 @@ class _SupplierPartDisplayState extends RefreshableState { _SupplierPartDisplayState(); + int parameterCount = 0; + int attachmentCount = 0; + @override String getAppBarTitle() => L10().supplierPart; @@ -97,7 +104,34 @@ class _SupplierPartDisplayState if (!result) { Navigator.of(context).pop(); + return; } + + InvenTreeParameter() + .countParameters( + InvenTreeSupplierPart.MODEL_TYPE, + widget.supplierPart.pk, + ) + .then((value) { + if (mounted) { + setState(() { + parameterCount = value; + }); + } + }); + + InvenTreeAttachment() + .countAttachments( + InvenTreeSupplierPart.MODEL_TYPE, + widget.supplierPart.pk, + ) + .then((value) { + if (mounted) { + setState(() { + attachmentCount = value; + }); + } + }); } /* @@ -286,6 +320,31 @@ class _SupplierPartDisplayState ); } + ListTile? parameterTile = ShowParametersItem( + context, + InvenTreeSupplierPart.MODEL_TYPE, + widget.supplierPart.pk, + parameterCount, + widget.supplierPart.canEdit, + ); + + if (parameterTile != null) { + tiles.add(parameterTile); + } + + ListTile? attachmentTile = ShowAttachmentsItem( + context, + InvenTreeSupplierPart.MODEL_TYPE, + widget.supplierPart.pk, + widget.supplierPart.SKU, + attachmentCount, + widget.supplierPart.canEdit, + ); + + if (attachmentTile != null) { + tiles.add(attachmentTile); + } + return tiles; } } diff --git a/lib/widget/order/purchase_order_detail.dart b/lib/widget/order/purchase_order_detail.dart index 0829e06c..d309a4b3 100644 --- a/lib/widget/order/purchase_order_detail.dart +++ b/lib/widget/order/purchase_order_detail.dart @@ -8,6 +8,7 @@ import "package:inventree/barcode/barcode.dart"; import "package:inventree/barcode/purchase_order.dart"; import "package:inventree/helpers.dart"; import "package:inventree/inventree/attachment.dart"; +import "package:inventree/inventree/parameter.dart"; import "package:inventree/l10.dart"; import "package:inventree/inventree/model.dart"; @@ -22,6 +23,7 @@ import "package:inventree/widget/order/po_line_list.dart"; import "package:inventree/widget/attachment_widget.dart"; import "package:inventree/widget/notes_widget.dart"; +import "package:inventree/widget/parameter_widget.dart"; import "package:inventree/widget/progress.dart"; import "package:inventree/widget/refreshable_state.dart"; import "package:inventree/widget/snacks.dart"; @@ -51,6 +53,7 @@ class _PurchaseOrderDetailState int completedLines = 0; int attachmentCount = 0; + int parameterCount = 0; bool showCameraShortcut = true; bool supportProjectCodes = false; @@ -300,6 +303,16 @@ class _PurchaseOrderDetailState } } + InvenTreeParameter() + .countParameters(InvenTreePurchaseOrder.MODEL_TYPE, widget.order.pk) + .then((int value) { + if (mounted) { + setState(() { + parameterCount = value; + }); + } + }); + InvenTreeAttachment() .countAttachments(InvenTreePurchaseOrder.MODEL_TYPE, widget.order.pk) .then((int value) { @@ -570,6 +583,18 @@ class _PurchaseOrderDetailState ), ); + ListTile? parameterTile = ShowParametersItem( + context, + InvenTreePurchaseOrder.MODEL_TYPE, + widget.order.pk, + parameterCount, + widget.order.canEdit, + ); + + if (parameterTile != null) { + tiles.add(parameterTile); + } + ListTile? attachmentTile = ShowAttachmentsItem( context, InvenTreePurchaseOrder.MODEL_TYPE, diff --git a/lib/widget/order/sales_order_detail.dart b/lib/widget/order/sales_order_detail.dart index 30692f2b..79a3620b 100644 --- a/lib/widget/order/sales_order_detail.dart +++ b/lib/widget/order/sales_order_detail.dart @@ -5,12 +5,14 @@ import "package:inventree/barcode/barcode.dart"; import "package:inventree/barcode/sales_order.dart"; import "package:inventree/inventree/attachment.dart"; import "package:inventree/inventree/company.dart"; +import "package:inventree/inventree/parameter.dart"; import "package:inventree/inventree/sales_order.dart"; import "package:inventree/preferences.dart"; import "package:inventree/widget/link_icon.dart"; import "package:inventree/widget/order/so_extra_line_list.dart"; import "package:inventree/widget/order/so_line_list.dart"; import "package:inventree/widget/order/so_shipment_list.dart"; +import "package:inventree/widget/parameter_widget.dart"; import "package:inventree/widget/refreshable_state.dart"; import "package:inventree/l10.dart"; @@ -43,6 +45,7 @@ class _SalesOrderDetailState extends RefreshableState { bool showCameraShortcut = true; bool supportsProjectCodes = false; int attachmentCount = 0; + int parameterCount = 0; @override String getAppBarTitle() { @@ -271,6 +274,16 @@ class _SalesOrderDetailState extends RefreshableState { true, ); + InvenTreeParameter() + .countParameters(InvenTreeSalesOrder.MODEL_TYPE, widget.order.pk) + .then((int value) { + if (mounted) { + setState(() { + parameterCount = value; + }); + } + }); + InvenTreeAttachment() .countAttachments(InvenTreeSalesOrder.MODEL_TYPE, widget.order.pk) .then((int value) { @@ -497,6 +510,18 @@ class _SalesOrderDetailState extends RefreshableState { ), ); + ListTile? parameterTile = ShowParametersItem( + context, + InvenTreeSalesOrder.MODEL_TYPE, + widget.order.pk, + parameterCount, + widget.order.canEdit, + ); + + if (parameterTile != null) { + tiles.add(parameterTile); + } + ListTile? attachmentTile = ShowAttachmentsItem( context, InvenTreeSalesOrder.MODEL_TYPE, diff --git a/lib/widget/part/part_parameter_widget.dart b/lib/widget/parameter_widget.dart similarity index 58% rename from lib/widget/part/part_parameter_widget.dart rename to lib/widget/parameter_widget.dart index c4df1890..07a38fcd 100644 --- a/lib/widget/part/part_parameter_widget.dart +++ b/lib/widget/parameter_widget.dart @@ -1,8 +1,12 @@ import "package:flutter/material.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; +import "package:inventree/api.dart"; +import "package:inventree/app_colors.dart"; import "package:inventree/inventree/model.dart"; +import "package:inventree/inventree/parameter.dart"; import "package:inventree/l10.dart"; -import "package:inventree/inventree/part.dart"; +import "package:inventree/widget/link_icon.dart"; import "package:inventree/widget/paginator.dart"; import "package:inventree/widget/progress.dart"; import "package:inventree/widget/refreshable_state.dart"; @@ -10,16 +14,18 @@ import "package:inventree/widget/refreshable_state.dart"; /* * Widget for displaying a list of parameters associated with a given Part instance */ -class PartParameterWidget extends StatefulWidget { - const PartParameterWidget(this.part); +class ParameterWidget extends StatefulWidget { + const ParameterWidget(this.modelType, this.modelId, this.editable) : super(); - final InvenTreePart part; + final String modelType; + final int modelId; + final bool editable; @override _ParameterWidgetState createState() => _ParameterWidgetState(); } -class _ParameterWidgetState extends RefreshableState { +class _ParameterWidgetState extends RefreshableState { _ParameterWidgetState(); @override @@ -34,9 +40,16 @@ class _ParameterWidgetState extends RefreshableState { @override Widget getBody(BuildContext context) { - Map filters = {"part": widget.part.pk.toString()}; + Map filters = { + "model_type": widget.modelType, + "model_id": widget.modelId.toString(), + }; - return Column(children: [Expanded(child: PaginatedParameterList(filters))]); + return Column( + children: [ + Expanded(child: PaginatedParameterList(filters, widget.editable)), + ], + ); } } @@ -44,9 +57,11 @@ class _ParameterWidgetState extends RefreshableState { * Widget for displaying a paginated list of Part parameters */ class PaginatedParameterList extends PaginatedSearchWidget { - const PaginatedParameterList(Map filters) + const PaginatedParameterList(Map filters, this.editable) : super(filters: filters); + final bool editable; + @override String get searchTitle => L10().parameters; @@ -75,7 +90,7 @@ class _PaginatedParameterState int offset, Map params, ) async { - final page = await InvenTreePartParameter().listPaginated( + final page = await InvenTreeParameter().listPaginated( limit, offset, filters: params, @@ -84,7 +99,7 @@ class _PaginatedParameterState return page; } - Future editParameter(InvenTreePartParameter parameter) async { + Future editParameter(InvenTreeParameter parameter) async { // Checkbox values are handled separately if (parameter.is_checkbox) { return; @@ -101,7 +116,7 @@ class _PaginatedParameterState @override Widget buildItem(BuildContext context, InvenTreeModel model) { - InvenTreePartParameter parameter = model as InvenTreePartParameter; + InvenTreeParameter parameter = model as InvenTreeParameter; String title = parameter.name; @@ -116,7 +131,7 @@ class _PaginatedParameterState ? Switch( value: parameter.as_bool, onChanged: (bool value) { - if (parameter.canEdit) { + if (widget.editable) { showLoadingOverlay(); parameter.update(values: {"data": value.toString()}).then(( value, @@ -131,10 +146,47 @@ class _PaginatedParameterState onTap: parameter.is_checkbox ? null : () async { - if (parameter.canEdit) { + if (widget.editable) { editParameter(parameter); } }, ); } } + +/* + * Return a ListTile to display parameters for the specified model + */ +ListTile? ShowParametersItem( + BuildContext context, + String modelType, + int modelId, + int parameterCount, + bool editable, +) { + // Note: Currently cannot add parameters from the app, + // So, if there are no parameters, do not show the item + if (parameterCount == 0) { + return null; + } + + if (!InvenTreeAPI().supportsModernParameters) { + return null; + } + + return ListTile( + title: Text(L10().parameters), + leading: Icon(TablerIcons.list_details, color: COLOR_ACTION), + trailing: LinkIcon( + text: parameterCount > 0 ? parameterCount.toString() : null, + ), + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => ParameterWidget(modelType, modelId, editable), + ), + ); + }, + ); +} diff --git a/lib/widget/part/part_detail.dart b/lib/widget/part/part_detail.dart index 30b697c4..73a299f8 100644 --- a/lib/widget/part/part_detail.dart +++ b/lib/widget/part/part_detail.dart @@ -5,6 +5,7 @@ import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/app_colors.dart"; import "package:inventree/barcode/barcode.dart"; import "package:inventree/inventree/attachment.dart"; +import "package:inventree/inventree/parameter.dart"; import "package:inventree/l10.dart"; import "package:inventree/helpers.dart"; @@ -16,10 +17,10 @@ import "package:inventree/preferences.dart"; import "package:inventree/widget/attachment_widget.dart"; import "package:inventree/widget/link_icon.dart"; +import "package:inventree/widget/parameter_widget.dart"; import "package:inventree/widget/part/bom_list.dart"; import "package:inventree/widget/part/part_list.dart"; import "package:inventree/widget/notes_widget.dart"; -import "package:inventree/widget/part/part_parameter_widget.dart"; import "package:inventree/widget/part/part_pricing.dart"; import "package:inventree/widget/progress.dart"; import "package:inventree/widget/part/category_display.dart"; @@ -50,13 +51,11 @@ class _PartDisplayState extends RefreshableState { InvenTreeStockLocation? defaultLocation; - int parameterCount = 0; - bool allowLabelPrinting = false; - bool showParameters = false; bool showBom = false; bool showPricing = false; + int parameterCount = 0; int attachmentCount = 0; int bomCount = 0; int usedInCount = 0; @@ -153,10 +152,6 @@ class _PartDisplayState extends RefreshableState { INV_PART_SHOW_PRICING, true, ); - showParameters = await InvenTreeSettingsManager().getBool( - INV_PART_SHOW_PARAMETERS, - true, - ); showBom = await InvenTreeSettingsManager().getBool(INV_PART_SHOW_BOM, true); allowLabelPrinting = await InvenTreeSettingsManager().getBool( INV_ENABLE_LABEL_PRINTING, @@ -213,15 +208,30 @@ class _PartDisplayState extends RefreshableState { } // Request the number of attachments - InvenTreeAttachment() - .countAttachments(InvenTreePart.MODEL_TYPE, part.pk) - .then((int value) { - if (mounted) { - setState(() { - attachmentCount = value; - }); - } - }); + if (api.supportsModernAttachments) { + InvenTreeAttachment() + .countAttachments(InvenTreePart.MODEL_TYPE, part.pk) + .then((int value) { + if (mounted) { + setState(() { + attachmentCount = value; + }); + } + }); + } + + // Request the number of parameters + if (api.supportsModernParameters) { + InvenTreeParameter() + .countParameters(InvenTreePart.MODEL_TYPE, part.pk) + .then((int value) { + if (mounted) { + setState(() { + parameterCount = value; + }); + } + }); + } // If show pricing information? if (showPricing) { @@ -599,6 +609,18 @@ class _PartDisplayState extends RefreshableState { ), ); + ListTile? parameterTile = ShowParametersItem( + context, + InvenTreePart.MODEL_TYPE, + part.pk, + parameterCount, + part.canEdit, + ); + + if (parameterTile != null) { + tiles.add(parameterTile); + } + ListTile? attachmentTile = ShowAttachmentsItem( context, InvenTreePart.MODEL_TYPE, @@ -705,10 +727,6 @@ class _PartDisplayState extends RefreshableState { List getTabIcons(BuildContext context) { List icons = [Tab(text: L10().details), Tab(text: L10().stock)]; - if (showParameters) { - icons.add(Tab(text: L10().parameters)); - } - return icons; } @@ -721,11 +739,6 @@ class _PartDisplayState extends RefreshableState { ), PaginatedStockItemList({"part": part.pk.toString()}), ]; - - if (showParameters) { - tabs.add(PaginatedParameterList({"part": part.pk.toString()})); - } - return tabs; } } From 571ff1880f91983db03e8098a5f20f58ec9b6703 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 6 Dec 2025 11:24:17 +1100 Subject: [PATCH 35/40] New translations app_en.arb (Chinese Simplified) (#739) --- lib/l10n/zh_CN/app_zh_CN.arb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/l10n/zh_CN/app_zh_CN.arb b/lib/l10n/zh_CN/app_zh_CN.arb index edb54e2c..876f122d 100644 --- a/lib/l10n/zh_CN/app_zh_CN.arb +++ b/lib/l10n/zh_CN/app_zh_CN.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "条形码扫描已暂停", "@barodeScanPaused": {}, - "barcodeScanPause": "Tap to pause scanning", + "barcodeScanPause": "点击或按住以暂停扫描", "@barcodeScanPause": {}, "barcodeScanAssign": "扫描以分配条形码", "@barcodeScanAssign": {}, @@ -472,9 +472,9 @@ "@itemUpdated": {}, "keywords": "关键词", "@keywords": {}, - "labelDriver": "Label Driver", + "labelDriver": "标签打印机", "@labelDriver": {}, - "labelSelectDriver": "Select Label Printer Driver", + "labelSelectDriver": "选择标签打印机", "@labelSelectDriver": {}, "labelPrinting": "打印标签", "@labelPrinting": {}, @@ -514,7 +514,7 @@ "@locationCreate": {}, "locationCreateDetail": "创建新库存地点", "@locationCreateDetail": {}, - "locationDefault": "Default Location", + "locationDefault": "默认库存地点", "@locationDefault": {}, "locationNotSet": "没有指定仓储位置", "@locationNotSet": {}, From 8c15bdafdf9aeb03be2c43e2b68794d345dbca96 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 19 Dec 2025 09:52:38 +1100 Subject: [PATCH 36/40] New Crowdin updates (#740) * New translations app_en.arb (Hungarian) * New translations app_en.arb (Hungarian) * New translations app_en.arb (Dutch) * New translations app_en.arb (Dutch) * New translations app_en.arb (Swedish) * New translations app_en.arb (Ukrainian) * New translations app_en.arb (Ukrainian) * New translations app_en.arb (German) * New translations app_en.arb (Turkish) * New translations app_en.arb (Italian) * New translations app_en.arb (Turkish) * New translations app_en.arb (Turkish) * New translations app_en.arb (Romanian) --- lib/l10n/de_DE/app_de_DE.arb | 30 +++++------ lib/l10n/hu_HU/app_hu_HU.arb | 52 +++++++++--------- lib/l10n/it_IT/app_it_IT.arb | 6 +-- lib/l10n/nl_NL/app_nl_NL.arb | 52 +++++++++--------- lib/l10n/ro_RO/app_ro_RO.arb | 16 +++--- lib/l10n/sv_SE/app_sv_SE.arb | 30 +++++------ lib/l10n/tr_TR/app_tr_TR.arb | 72 ++++++++++++------------- lib/l10n/uk_UA/app_uk_UA.arb | 102 +++++++++++++++++------------------ 8 files changed, 180 insertions(+), 180 deletions(-) diff --git a/lib/l10n/de_DE/app_de_DE.arb b/lib/l10n/de_DE/app_de_DE.arb index dc075efa..e0bb95c4 100644 --- a/lib/l10n/de_DE/app_de_DE.arb +++ b/lib/l10n/de_DE/app_de_DE.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Barcode-Scannen angehalten", "@barodeScanPaused": {}, - "barcodeScanPause": "Tap to pause scanning", + "barcodeScanPause": "Tippen um das Scannen zu pausieren", "@barcodeScanPause": {}, "barcodeScanAssign": "Scannen um Barcode zuzuweisen", "@barcodeScanAssign": {}, @@ -472,9 +472,9 @@ "@itemUpdated": {}, "keywords": "Schlüsselwörter", "@keywords": {}, - "labelDriver": "Label Driver", + "labelDriver": "Etikettendrucker Treiber", "@labelDriver": {}, - "labelSelectDriver": "Select Label Printer Driver", + "labelSelectDriver": "Etikettendrucker Treiber auswählen", "@labelSelectDriver": {}, "labelPrinting": "Etikettendruck", "@labelPrinting": {}, @@ -944,29 +944,29 @@ "@shipment": {}, "shipments": "Lieferungen", "@shipments": {}, - "shipmentsPending": "Ausstehende Sendungen", + "shipmentsPending": "Ausstehende Lieferungen", "@shipmentsPending": {}, "shipmentAdd": "Lieferung hinzufügen", "@shipmentAdd": {}, - "shipmentCheck": "Sendung prüfen", + "shipmentCheck": "Lieferung überprüfen", "@shipmentCheck": {}, - "shipmentCheckDetail": "Diese Sendung als geprüft markieren", + "shipmentCheckDetail": "Diese Lieferung als geprüft markieren", "@shipmentCheckDetail": {}, - "shipmentChecked": "Sendung geprüft", + "shipmentChecked": "Lieferung überprüft", "@shipmentChecked": {}, "shipmentDate": "Versanddatum", "@shipmentDate": {}, - "shipmentEdit": "Sendung bearbeiten", + "shipmentEdit": "Lieferung bearbeiten", "@shipmentEdit": {}, - "shipmentReference": "Shipment Reference", + "shipmentReference": "Sendungsreferenz", "@shipmentReference": {}, "shipmentSend": "Lieferung versenden", "@shipmentSend": {}, - "shipmentUncheck": "Uncheck Shipment", + "shipmentUncheck": "Lieferung ungeprüft markieren", "@shipmentUncheck": {}, - "shipmentUncheckDetail": "Mark this shipment as unchecked", + "shipmentUncheckDetail": "Diese Lieferung als ungeprüft markieren", "@shipmentUncheckDetail": {}, - "shipmentUpdated": "Shipment Updated", + "shipmentUpdated": "Lieferung Aktualisiert", "@shipmentUpdated": {}, "shipped": "Versandt", "@shipped": {}, @@ -1102,7 +1102,7 @@ "@timeout": { "description": "" }, - "toggleTorch": "Toggle Torch", + "toggleTorch": "Taschenlampe umschalten", "@toggleTorch": {}, "tokenError": "Token-Fehler", "@tokenError": {}, @@ -1182,7 +1182,7 @@ "@priceRange": {}, "priceOverrideMin": "Mindestpreis überschreiben", "@priceOverrideMin": {}, - "priceOverrideMax": "Maximum Price Override", + "priceOverrideMax": "Maximalen Preis ignorieren", "@priceOverrideMax": {}, "salePrice": "Verkaufspreis", "@salePrice": {}, @@ -1198,7 +1198,7 @@ "@variantCost": {}, "overallPricing": "Gesamt Preise", "@overallPricing": {}, - "pricingOverrides": "Pricing Overrides", + "pricingOverrides": "Preisgestaltung ignorieren", "@pricingOverrides": {}, "currency": "Währung", "@currency": {}, diff --git a/lib/l10n/hu_HU/app_hu_HU.arb b/lib/l10n/hu_HU/app_hu_HU.arb index 3286dfae..509d9d2a 100644 --- a/lib/l10n/hu_HU/app_hu_HU.arb +++ b/lib/l10n/hu_HU/app_hu_HU.arb @@ -46,7 +46,7 @@ "@aspectRatioSquare": {}, "allocateStock": "Készlet foglalása", "@allocateStock": {}, - "allocatedStock": "Allocated Stock", + "allocatedStock": "Lefoglalt Készlet", "@allocatedStock": {}, "appReleaseNotes": "Kiadási közlemények", "@appReleaseNotes": {}, @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Vonalkód olvasás megállítva", "@barodeScanPaused": {}, - "barcodeScanPause": "Tap to pause scanning", + "barcodeScanPause": "Érintse meg a szkennelés szüneteltetéséhez", "@barcodeScanPause": {}, "barcodeScanAssign": "Kódolvasás a hozzárendeléshez", "@barcodeScanAssign": {}, @@ -240,7 +240,7 @@ "@deletePartDetail": {}, "deleteSuccess": "Törlés sikeres", "@deleteSuccess": {}, - "deliveryDate": "Delivery Date", + "deliveryDate": "Szállítási Dátum", "@deliveryDate": {}, "description": "Leírás", "@description": {}, @@ -384,9 +384,9 @@ "@homeShowPo": {}, "homeShowPoDescription": "Beszerzési rendelések gomb megjelenítése a főoldalon", "@homeShowPoDescription": {}, - "homeShowShipments": "Show Shipments", + "homeShowShipments": "Szállítmányok Mutatása", "@homeShowShipments": {}, - "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "homeShowShipmentsDescription": "Függőben lévő szállítmányok megjelenítése a kezdőképernyőn", "@homeShowShipmentsDescription": {}, "homeShowSo": "Vevői rendelések megmutatása", "@homeShowSo": {}, @@ -454,9 +454,9 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Érvénytelen felhasználónév/jelszó kombináció", "@invalidUsernamePassword": {}, - "invoice": "Invoice", + "invoice": "Számla", "@invoice": {}, - "invoiceNumber": "Invoice Number", + "invoiceNumber": "Számlaszám", "@invoiceNumber": {}, "issue": "Kiküldés", "@issue": {}, @@ -472,9 +472,9 @@ "@itemUpdated": {}, "keywords": "Kulcsszavak", "@keywords": {}, - "labelDriver": "Label Driver", + "labelDriver": "Címke Meghajtó", "@labelDriver": {}, - "labelSelectDriver": "Select Label Printer Driver", + "labelSelectDriver": "Címkenyomtató Meghajtó Kiválasztása", "@labelSelectDriver": {}, "labelPrinting": "Címke nyomtatás", "@labelPrinting": {}, @@ -514,7 +514,7 @@ "@locationCreate": {}, "locationCreateDetail": "Új készlet hely létrehozása", "@locationCreateDetail": {}, - "locationDefault": "Default Location", + "locationDefault": "Alapértelmezett Hely", "@locationDefault": {}, "locationNotSet": "Nincs megadva hely", "@locationNotSet": {}, @@ -544,7 +544,7 @@ "@missingData": {}, "name": "Név", "@name": {}, - "no": "No", + "no": "Nem", "@no": {}, "notApplicable": "N/A", "@notApplicable": {}, @@ -660,7 +660,7 @@ "@password": {}, "passwordEmpty": "Jelszó nem lehet üres", "@passwordEmpty": {}, - "pending": "Pending", + "pending": "Függőben", "@pending": {}, "permissionAccountDenied": "Nincs meg a szükséges jogosultságod, hogy végrehajtsd ezt a műveletet", "@permissionAccountDenied": {}, @@ -940,33 +940,33 @@ "@serverNotConnected": {}, "serverNotSelected": "Nincs kiszolgáló választva", "@serverNotSelected": {}, - "shipment": "Shipment", + "shipment": "Szállítmány", "@shipment": {}, "shipments": "Szállítmányok", "@shipments": {}, - "shipmentsPending": "Pending Shipments", + "shipmentsPending": "Függőben Lévő Szállítmányok", "@shipmentsPending": {}, "shipmentAdd": "Szállítmány hozzáadása", "@shipmentAdd": {}, - "shipmentCheck": "Check Shipment", + "shipmentCheck": "Szállítmány Ellenőrzése", "@shipmentCheck": {}, - "shipmentCheckDetail": "Mark this shipment as checked", + "shipmentCheckDetail": "Jelölje meg ezt a szállítmányt ellenőrzöttként", "@shipmentCheckDetail": {}, - "shipmentChecked": "Shipment Checked", + "shipmentChecked": "Szállítmány Ellenőrizve", "@shipmentChecked": {}, - "shipmentDate": "Shipment Date", + "shipmentDate": "Szállítmány Dátuma", "@shipmentDate": {}, - "shipmentEdit": "Edit Shipment", + "shipmentEdit": "Szállítmány Szerkesztése", "@shipmentEdit": {}, - "shipmentReference": "Shipment Reference", + "shipmentReference": "Szállítmány Hivatkozás", "@shipmentReference": {}, - "shipmentSend": "Send Shipment", + "shipmentSend": "Szállítmány Küldése", "@shipmentSend": {}, - "shipmentUncheck": "Uncheck Shipment", + "shipmentUncheck": "Szállítmány Ellenőrzés Visszavonása", "@shipmentUncheck": {}, - "shipmentUncheckDetail": "Mark this shipment as unchecked", + "shipmentUncheckDetail": "Jelölje meg ezt a szállítmányt nem ellenőrzöttként", "@shipmentUncheckDetail": {}, - "shipmentUpdated": "Shipment Updated", + "shipmentUpdated": "Szállítmány Frissítve", "@shipmentUpdated": {}, "shipped": "Kiszállítva", "@shipped": {}, @@ -1112,7 +1112,7 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Teljes ár", "@totalPrice": {}, - "trackingNumber": "Tracking Number", + "trackingNumber": "Nyomkövetési Szám", "@trackingNumber": {}, "transfer": "Áthelyezés", "@transfer": { @@ -1174,7 +1174,7 @@ "@viewSupplierPart": {}, "website": "Weboldal", "@website": {}, - "yes": "Yes", + "yes": "Igen", "@yes": {}, "price": "Ár", "@price": {}, diff --git a/lib/l10n/it_IT/app_it_IT.arb b/lib/l10n/it_IT/app_it_IT.arb index db6286ab..ecbe8b11 100644 --- a/lib/l10n/it_IT/app_it_IT.arb +++ b/lib/l10n/it_IT/app_it_IT.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Scansione codice a barre in pausa", "@barodeScanPaused": {}, - "barcodeScanPause": "Tap to pause scanning", + "barcodeScanPause": "Tocca per mettere in pausa la scansione", "@barcodeScanPause": {}, "barcodeScanAssign": "Scansiona per assegnare codice a barre", "@barcodeScanAssign": {}, @@ -472,9 +472,9 @@ "@itemUpdated": {}, "keywords": "Parole Chiave", "@keywords": {}, - "labelDriver": "Label Driver", + "labelDriver": "Driver Etichetta", "@labelDriver": {}, - "labelSelectDriver": "Select Label Printer Driver", + "labelSelectDriver": "Seleziona Il Driver Della Stampante Etichette", "@labelSelectDriver": {}, "labelPrinting": "Etichetta in stampa", "@labelPrinting": {}, diff --git a/lib/l10n/nl_NL/app_nl_NL.arb b/lib/l10n/nl_NL/app_nl_NL.arb index d8eab7d2..ba457583 100644 --- a/lib/l10n/nl_NL/app_nl_NL.arb +++ b/lib/l10n/nl_NL/app_nl_NL.arb @@ -46,7 +46,7 @@ "@aspectRatioSquare": {}, "allocateStock": "Voorraad Toewijzen", "@allocateStock": {}, - "allocatedStock": "Allocated Stock", + "allocatedStock": "Toegewezen voorraad", "@allocatedStock": {}, "appReleaseNotes": "App release notities weergeven", "@appReleaseNotes": {}, @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Barcode scannen gepauzeerd", "@barodeScanPaused": {}, - "barcodeScanPause": "Tap to pause scanning", + "barcodeScanPause": "Klik om scannen te pauzeren", "@barcodeScanPause": {}, "barcodeScanAssign": "Scan om streepjescode toe te wijzen", "@barcodeScanAssign": {}, @@ -240,7 +240,7 @@ "@deletePartDetail": {}, "deleteSuccess": "Succesvol verwijderd", "@deleteSuccess": {}, - "deliveryDate": "Delivery Date", + "deliveryDate": "Leveringsdatum", "@deliveryDate": {}, "description": "Omschrijving", "@description": {}, @@ -384,9 +384,9 @@ "@homeShowPo": {}, "homeShowPoDescription": "Inkooporder knop op startscherm weergeven", "@homeShowPoDescription": {}, - "homeShowShipments": "Show Shipments", + "homeShowShipments": "Verzending weergeven", "@homeShowShipments": {}, - "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "homeShowShipmentsDescription": "Toon Leveringen in afwachting op het startscherm", "@homeShowShipmentsDescription": {}, "homeShowSo": "Toon Verkooporders", "@homeShowSo": {}, @@ -454,9 +454,9 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Ongeldige gebruikersnaam / wachtwoord combinatie", "@invalidUsernamePassword": {}, - "invoice": "Invoice", + "invoice": "Factuur", "@invoice": {}, - "invoiceNumber": "Invoice Number", + "invoiceNumber": "Factuur nummer", "@invoiceNumber": {}, "issue": "Probleem", "@issue": {}, @@ -472,9 +472,9 @@ "@itemUpdated": {}, "keywords": "Trefwoorden", "@keywords": {}, - "labelDriver": "Label Driver", + "labelDriver": "Label printer", "@labelDriver": {}, - "labelSelectDriver": "Select Label Printer Driver", + "labelSelectDriver": "Selecteer Label Printer Driver", "@labelSelectDriver": {}, "labelPrinting": "Label afdrukken", "@labelPrinting": {}, @@ -514,7 +514,7 @@ "@locationCreate": {}, "locationCreateDetail": "Creëer nieuwe voorraadlocatie", "@locationCreateDetail": {}, - "locationDefault": "Default Location", + "locationDefault": "Standaard locatie", "@locationDefault": {}, "locationNotSet": "Geen locatie opgegeven", "@locationNotSet": {}, @@ -544,9 +544,9 @@ "@missingData": {}, "name": "Naam", "@name": {}, - "no": "No", + "no": "Nee", "@no": {}, - "notApplicable": "N/A", + "notApplicable": "N.v.t. ", "@notApplicable": {}, "notConnected": "Niet verbonden", "@notConnected": {}, @@ -660,7 +660,7 @@ "@password": {}, "passwordEmpty": "Wachtwoord mag niet leeg zijn", "@passwordEmpty": {}, - "pending": "Pending", + "pending": "In behandeling", "@pending": {}, "permissionAccountDenied": "U heeft niet de vereiste rechten om deze actie uit te voeren", "@permissionAccountDenied": {}, @@ -940,33 +940,33 @@ "@serverNotConnected": {}, "serverNotSelected": "Server niet geselecteerd", "@serverNotSelected": {}, - "shipment": "Shipment", + "shipment": "Levering", "@shipment": {}, "shipments": "Verzendingen", "@shipments": {}, - "shipmentsPending": "Pending Shipments", + "shipmentsPending": "Leveringen in behandeling", "@shipmentsPending": {}, "shipmentAdd": "Verzending toevoegen", "@shipmentAdd": {}, - "shipmentCheck": "Check Shipment", + "shipmentCheck": "Controleer Levering", "@shipmentCheck": {}, - "shipmentCheckDetail": "Mark this shipment as checked", + "shipmentCheckDetail": "Markeer deze levering als gecontroleerd", "@shipmentCheckDetail": {}, - "shipmentChecked": "Shipment Checked", + "shipmentChecked": "Levering gecontroleerd", "@shipmentChecked": {}, - "shipmentDate": "Shipment Date", + "shipmentDate": "Leverings Datum", "@shipmentDate": {}, - "shipmentEdit": "Edit Shipment", + "shipmentEdit": "Wijzig levering", "@shipmentEdit": {}, "shipmentReference": "Shipment Reference", "@shipmentReference": {}, - "shipmentSend": "Send Shipment", + "shipmentSend": "Verzending versturen", "@shipmentSend": {}, - "shipmentUncheck": "Uncheck Shipment", + "shipmentUncheck": "Verzending uitvinken", "@shipmentUncheck": {}, - "shipmentUncheckDetail": "Mark this shipment as unchecked", + "shipmentUncheckDetail": "Markeer deze levering als niet gecontroleerd", "@shipmentUncheckDetail": {}, - "shipmentUpdated": "Shipment Updated", + "shipmentUpdated": "Verzending bijgewerkt", "@shipmentUpdated": {}, "shipped": "Verzonden", "@shipped": {}, @@ -1112,7 +1112,7 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Totaalprijs", "@totalPrice": {}, - "trackingNumber": "Tracking Number", + "trackingNumber": "Traceernummer", "@trackingNumber": {}, "transfer": "Verplaats", "@transfer": { @@ -1174,7 +1174,7 @@ "@viewSupplierPart": {}, "website": "Website", "@website": {}, - "yes": "Yes", + "yes": "Ja", "@yes": {}, "price": "Prijs", "@price": {}, diff --git a/lib/l10n/ro_RO/app_ro_RO.arb b/lib/l10n/ro_RO/app_ro_RO.arb index ff74b986..6f07c0dc 100644 --- a/lib/l10n/ro_RO/app_ro_RO.arb +++ b/lib/l10n/ro_RO/app_ro_RO.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Scanare cod de bare întreruptă", "@barodeScanPaused": {}, - "barcodeScanPause": "Tap to pause scanning", + "barcodeScanPause": "Atingeți pentru a întrerupe scanarea", "@barcodeScanPause": {}, "barcodeScanAssign": "Scanează pentru a atribui cod de bare", "@barcodeScanAssign": {}, @@ -472,9 +472,9 @@ "@itemUpdated": {}, "keywords": "Cuvinte cheie", "@keywords": {}, - "labelDriver": "Label Driver", + "labelDriver": "Etichetează șofer", "@labelDriver": {}, - "labelSelectDriver": "Select Label Printer Driver", + "labelSelectDriver": "Selectați șofer de imprimante etichetă", "@labelSelectDriver": {}, "labelPrinting": "Printare etichete", "@labelPrinting": {}, @@ -822,17 +822,17 @@ "@response504": {}, "response505": "Versiunea HTTP nu este suportată", "@response505": {}, - "responseData": "Response data", + "responseData": "Date Răspuns", "@responseData": {}, - "responseInvalid": "Invalid Response Code", + "responseInvalid": "Cod de răspuns nevalid", "@responseInvalid": {}, - "responseUnknown": "Unknown Response", + "responseUnknown": "Răspuns necunoscut", "@responseUnknown": {}, - "result": "Result", + "result": "Rezultat", "@result": { "description": "" }, - "returned": "Returned", + "returned": "Returnat", "@returned": {}, "salesOrder": "Sales Order", "@salesOrder": {}, diff --git a/lib/l10n/sv_SE/app_sv_SE.arb b/lib/l10n/sv_SE/app_sv_SE.arb index ae837a46..88d8b85f 100644 --- a/lib/l10n/sv_SE/app_sv_SE.arb +++ b/lib/l10n/sv_SE/app_sv_SE.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Streckkodsskanning pausad", "@barodeScanPaused": {}, - "barcodeScanPause": "Tap to pause scanning", + "barcodeScanPause": "Tryck för att pausa skanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Skanna för att tilldela streckkod", "@barcodeScanAssign": {}, @@ -228,7 +228,7 @@ "@delete": {}, "deleteFailed": "Borttagning misslyckades", "@deleteFailed": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", + "deleteImageConfirmation": "Är du säker på att du vill radera denna bild?", "@deleteImageConfirmation": {}, "deleteImageTooltip": "Radera bild", "@deleteImageTooltip": {}, @@ -240,7 +240,7 @@ "@deletePartDetail": {}, "deleteSuccess": "Borttagning lyckad", "@deleteSuccess": {}, - "deliveryDate": "Delivery Date", + "deliveryDate": "Leveransdatum", "@deliveryDate": {}, "description": "Beskrivning", "@description": {}, @@ -384,9 +384,9 @@ "@homeShowPo": {}, "homeShowPoDescription": "Visa knappen för inköpsorder på startskärmen", "@homeShowPoDescription": {}, - "homeShowShipments": "Show Shipments", + "homeShowShipments": "Visa leveranser", "@homeShowShipments": {}, - "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "homeShowShipmentsDescription": "Visa väntande leveranser på startskärmen", "@homeShowShipmentsDescription": {}, "homeShowSo": "Visa försäljningsorder", "@homeShowSo": {}, @@ -514,7 +514,7 @@ "@locationCreate": {}, "locationCreateDetail": "Skapa ny lagerplats", "@locationCreateDetail": {}, - "locationDefault": "Default Location", + "locationDefault": "Förvald plats", "@locationDefault": {}, "locationNotSet": "Ingen plats specificerad", "@locationNotSet": {}, @@ -564,9 +564,9 @@ "@noResults": {}, "noImageAvailable": "Ingen bild tillgänglig", "@noImageAvailable": {}, - "noPricingAvailable": "No pricing available", + "noPricingAvailable": "Ingen prisinformation tillgänglig", "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", + "noPricingDataFound": "Inga prisuppgifter hittades för denna artikel", "@noPricingDataFound": {}, "noSubcategories": "Inga underkategorier", "@noSubcategories": {}, @@ -630,7 +630,7 @@ "@partsNone": {}, "partNoResults": "Inga artiklar som matchar sökfrågan", "@partNoResults": {}, - "partPricing": "Part Pricing", + "partPricing": "Artikelpris", "@partPricing": {}, "partPricingSettingDetail": "Display part pricing information", "@pricingSettingDetail": {}, @@ -762,7 +762,7 @@ "@reference": {}, "refresh": "Uppdatera", "@refresh": {}, - "rotateClockwise": "Rotate 90° clockwise", + "rotateClockwise": "Rotera 90° medurs", "@rotateClockwise": {}, "refreshing": "Uppdaterar", "@refreshing": {}, @@ -940,7 +940,7 @@ "@serverNotConnected": {}, "serverNotSelected": "Servern är inte vald", "@serverNotSelected": {}, - "shipment": "Shipment", + "shipment": "Försändelse", "@shipment": {}, "shipments": "Frakt", "@shipments": {}, @@ -954,7 +954,7 @@ "@shipmentCheckDetail": {}, "shipmentChecked": "Shipment Checked", "@shipmentChecked": {}, - "shipmentDate": "Shipment Date", + "shipmentDate": "Leveransdatum", "@shipmentDate": {}, "shipmentEdit": "Edit Shipment", "@shipmentEdit": {}, @@ -1112,7 +1112,7 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Totalpris", "@totalPrice": {}, - "trackingNumber": "Tracking Number", + "trackingNumber": "Sändningsnummer", "@trackingNumber": {}, "transfer": "Överföring", "@transfer": { @@ -1184,11 +1184,11 @@ "@priceOverrideMin": {}, "priceOverrideMax": "Maximum Price Override", "@priceOverrideMax": {}, - "salePrice": "Sale Price", + "salePrice": "Försäljningspris", "@salePrice": {}, "saleHistory": "Sale History", "@saleHistory": {}, - "supplierPricing": "Supplier Pricing", + "supplierPricing": "Leverantörspriser", "@supplierPricing": {}, "bomCost": "BOM Cost", "@bomCost": {}, diff --git a/lib/l10n/tr_TR/app_tr_TR.arb b/lib/l10n/tr_TR/app_tr_TR.arb index dfffe0e6..464d3900 100644 --- a/lib/l10n/tr_TR/app_tr_TR.arb +++ b/lib/l10n/tr_TR/app_tr_TR.arb @@ -48,7 +48,7 @@ "@allocateStock": {}, "allocatedStock": "Tahsis Edilen Stok", "@allocatedStock": {}, - "appReleaseNotes": "Uygulama yayınlama notlarını göster", + "appReleaseNotes": "Uygulama yayınlama notlarını görüntüle", "@appReleaseNotes": {}, "appSettings": "Uygulama Ayarları", "@appSettings": {}, @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Barkod tarama duraklatıldı", "@barodeScanPaused": {}, - "barcodeScanPause": "Tap to pause scanning", + "barcodeScanPause": "Taramayı duraklatmak için dokunun", "@barcodeScanPause": {}, "barcodeScanAssign": "Atanmış barkodu tara", "@barcodeScanAssign": {}, @@ -116,7 +116,7 @@ "@barcodeScanDelayDetail": {}, "barcodeScanGeneral": "Bir InvenTree barkodu tara", "@barcodeScanGeneral": {}, - "barcodeScanInItems": "Stok ögelerini bu konum içine tara", + "barcodeScanInItems": "Stok kalemlerini bu konumun içine tara", "@barcodeScanInItems": {}, "barcodeScanLocation": "Stok konumu tara", "@barcodeScanLocation": {}, @@ -128,7 +128,7 @@ "@barcodeScanIntoLocationSuccess": {}, "barcodeScanIntoLocationFailure": "Madde taranmış değil", "@barcodeScanIntoLocationFailure": {}, - "barcodeScanItem": "Stok öğesi tara", + "barcodeScanItem": "Stok kalemi tara", "@barcodeScanItem": {}, "barcodeTones": "Barkod Tonları", "@barcodeTones": {}, @@ -144,9 +144,9 @@ "@bom": {}, "bomEnable": "Malzeme Listesini Görüntüle", "@bomEnable": {}, - "build": "Oluştur", + "build": "Yap", "@build": {}, - "building": "Oluşturma", + "building": "Yapılıyor", "@building": {}, "cameraCreationError": "Kamera Kontrolcüsü Açılamadı", "@cameraCreationError": {}, @@ -278,7 +278,7 @@ "@editPart": { "description": "edit part" }, - "editItem": "Parçayı Düzenle", + "editItem": "Stok kalemi düzenle", "@editItem": {}, "editLineItem": "Satır Ögesini Düzenle", "@editLineItem": {}, @@ -348,7 +348,7 @@ "@filterInStockDetail": {}, "filterSerialized": "Sıralandırılmış", "@filterSerialized": {}, - "filterSerializedDetail": "Sıralandırılmış stok ürünkerini göster", + "filterSerializedDetail": "Seri numaralı stok kalemlerini göster", "@filterSerializedDetail": {}, "filterTemplate": "Şablon", "@filterTemplate": {}, @@ -414,7 +414,7 @@ "@imageUploadSuccess": {}, "inactive": "Pasif", "@inactive": {}, - "inactiveCompany": "Bu şirket inaktif olarak imlendi", + "inactiveCompany": "Bu şirket pasif olarak imlendi", "@inactiveCompany": {}, "inactiveDetail": "Bu parça pasif olarak işaretlendi", "@inactiveDetail": {}, @@ -434,7 +434,7 @@ "@info": {}, "inProduction": "Yapım Aşamasında", "@inProduction": {}, - "inProductionDetail": "Bu ürün üretim aşamasında", + "inProductionDetail": "Bu stok kalemi üretimdedir", "@inProductionDetail": {}, "internalPart": "İç Parça", "@internalPart": {}, @@ -448,7 +448,7 @@ "@invalidPartCategory": {}, "invalidStockLocation": "Geçersiz Stok Konumu", "@invalidStockLocation": {}, - "invalidStockItem": "Geçersiz Stok Parçası", + "invalidStockItem": "Geçersiz Stok Kalemi", "@invalidStockItem": {}, "invalidSupplierPart": "Geçersiz Tedarikçi Parçası", "@invalidSupplierPart": {}, @@ -474,7 +474,7 @@ "@keywords": {}, "labelDriver": "Label Driver", "@labelDriver": {}, - "labelSelectDriver": "Select Label Printer Driver", + "labelSelectDriver": "Etiket Yazıcı Sürücüsü Seçin", "@labelSelectDriver": {}, "labelPrinting": "Etiket Yazdırma", "@labelPrinting": {}, @@ -492,7 +492,7 @@ "@languageDefault": {}, "languageSelect": "Dil Seçin", "@languageSelect": {}, - "lastStocktake": "Son stok tutma", + "lastStocktake": "Son Stok Sayımı", "@lastStocktake": {}, "lastUpdated": "Son güncelleme", "@lastUpdated": {}, @@ -506,7 +506,7 @@ "@lineItems": {}, "lineItemUpdated": "Satır ögesi güncellendi", "@lineItemUpdated": {}, - "locateItem": "Stok ögesi bul", + "locateItem": "Stok kalemi bul", "@locateItem": {}, "locateLocation": "Stok konumu bul", "@locateLocation": {}, @@ -514,7 +514,7 @@ "@locationCreate": {}, "locationCreateDetail": "Yeni stok konumu oluştur", "@locationCreateDetail": {}, - "locationDefault": "Default Location", + "locationDefault": "Varsayılan Konum", "@locationDefault": {}, "locationNotSet": "Belirtilmiş konum yok", "@locationNotSet": {}, @@ -602,7 +602,7 @@ "@packageName": {}, "parameters": "Parametreler", "@parameters": {}, - "parametersSettingDetail": "Parça parametrelerini göster", + "parametersSettingDetail": "Parça parametrelerini görüntüle", "@parametersSettingDetail": {}, "parent": "Üst", "@parent": {}, @@ -712,7 +712,7 @@ "@purchaseOrderConfirmScan": {}, "purchaseOrderConfirmScanDetail": "Taranan Ürünlerin Detaylarını Onayla", "@purchaseOrderConfirmScanDetail": {}, - "purchaseOrderEnable": "Satın Alma Emirlerini Etkinleştir", + "purchaseOrderEnable": "Satın Alma Siparişlerini Etkinleştir", "@purchaseOrderEnable": {}, "purchaseOrderEnableDetail": "Satın Alma Emirlerinin İşlevselliğini Etkinleştir", "@purchaseOrderEnableDetail": {}, @@ -728,7 +728,7 @@ "@purchaseOrderEdit": {}, "purchaseOrderSettings": "Satın Alma Emri Ayarları", "@purchaseOrderSettings": {}, - "purchaseOrders": "Satınalma Siparişleri", + "purchaseOrders": "Satın Alma Siparişleri", "@purchaseOrders": {}, "purchaseOrderUpdated": "Satın Alma Siparişi güncellendi", "@purchaseOrderUpdated": {}, @@ -756,7 +756,7 @@ "@receivedFilterDetail": {}, "receiveItem": "Alınan Öğeler", "@receiveItem": {}, - "receivedItem": "Alınan stok parçaları", + "receivedItem": "Alınan stok kalemleri", "@receivedItem": {}, "reference": "Referans", "@reference": {}, @@ -838,7 +838,7 @@ "@salesOrder": {}, "salesOrders": "Satış Siparişleri", "@salesOrders": {}, - "salesOrderEnable": "Satış Emirlerini Etkinleştir", + "salesOrderEnable": "Satış Siparişlerini Etkinleştir", "@salesOrderEnable": {}, "salesOrderEnableDetail": "Satış Siparişlerinin İşlevselliğini Etkinleştir", "@salesOrderEnableDetail": {}, @@ -860,7 +860,7 @@ }, "scanBarcode": "Barkod Tara", "@scanBarcode": {}, - "scanSupplierPart": "Sağlayıcı parça barkodunu tara", + "scanSupplierPart": "Tedarikçi parça barkodunu tara", "@scanSupplierPart": {}, "scanIntoLocation": "Konuma Tara", "@scanIntoLocation": {}, @@ -998,25 +998,25 @@ "@stockItems": {}, "stockItemCreate": "Yeni Stok Kalemi", "@stockItemCreate": {}, - "stockItemCreateDetail": "Bu konuma yeni stok kalemi oluştur", + "stockItemCreateDetail": "Bu konumda yeni stok kalemi oluştur", "@stockItemCreateDetail": {}, "stockItemDelete": "Stok parçasını sil", "@stockItemDelete": {}, - "stockItemDeleteConfirm": "Bu stock ögesini silmek istediğinize emin misiniz?", + "stockItemDeleteConfirm": "Bu stok kalemini silmek istediğinize emin misiniz?", "@stockItemDeleteConfirm": {}, - "stockItemDeleteFailure": "Stok parçası silinemedi", + "stockItemDeleteFailure": "Stok kalemi silinemedi", "@stockItemDeleteFailure": {}, - "stockItemDeleteSuccess": "Stok ögesi silindi", + "stockItemDeleteSuccess": "Stok kalemi silindi", "@stockItemDeleteSuccess": {}, "stockItemHistory": "Stok Geçmişi", "@stockItemHistory": {}, - "stockItemHistoryDetail": "Geçmiş stok takip bilgisini göster", + "stockItemHistoryDetail": "Geçmiş stok takip bilgisini görüntüle", "@stockItemHistoryDetail": {}, - "stockItemTransferred": "Stok ögesi aktarıldı", + "stockItemTransferred": "Stok kalemi aktarıldı", "@stockItemTransferred": {}, - "stockItemUpdated": "Stok ögesi güncellendi", + "stockItemUpdated": "Stok kalemi güncellendi", "@stockItemUpdated": {}, - "stockItemsNotAvailable": "Kullanılabilir stok ögesi yok", + "stockItemsNotAvailable": "Stok kalemi bulunmamaktadır", "@stockItemsNotAvailable": {}, "stockItemNotes": "Stok Kalemi Notları", "@stockItemNotes": {}, @@ -1056,11 +1056,11 @@ "@supplier": {}, "supplierPart": "Tedarikçi Parçası", "@supplierPart": {}, - "supplierPartEdit": "Sağlayıcı Parçasını Düzenle", + "supplierPartEdit": "Tedarikçi Parçasını Düzenle", "@supplierPartEdit": {}, - "supplierPartNumber": "Sağlayıcı Parça Numarası", + "supplierPartNumber": "Tedarikçi Parça Numarası", "@supplierPartNumber": {}, - "supplierPartUpdated": "Sağlayıcı Parçası Güncellendi", + "supplierPartUpdated": "Tedarikçi Parçası Güncellendi", "@supplierPartUpdated": {}, "supplierParts": "Tedarikçi Parçaları", "@supplierParts": {}, @@ -1086,7 +1086,7 @@ "@testResults": { "description": "" }, - "testResultsDetail": "Stok ögesi test sonuçlarını görüntüle", + "testResultsDetail": "Stok kalemi test sonuçlarını görüntüle", "@testResultsDetail": {}, "testResultAdd": "Test Sonucu Ekle", "@testResultAdd": {}, @@ -1166,7 +1166,7 @@ "@valueCannotBeEmpty": {}, "valueRequired": "Değer gereklidir", "@valueRequired": {}, - "variants": "Türevler", + "variants": "Varyantlar", "@variants": {}, "version": "Sürüm", "@version": {}, @@ -1188,13 +1188,13 @@ "@salePrice": {}, "saleHistory": "Satış Geçmişi", "@saleHistory": {}, - "supplierPricing": "Sağlayıcı Fiyatlandırması", + "supplierPricing": "Tedarikçi Fiyatlandırması", "@supplierPricing": {}, "bomCost": "BoM Maliyeti", "@bomCost": {}, "internalCost": "Dahili Maliyet", "@internalCost": {}, - "variantCost": "Türev Maliyeti", + "variantCost": "Varyant Maliyeti", "@variantCost": {}, "overallPricing": "Genel Fiyatlandırma", "@overallPricing": {}, diff --git a/lib/l10n/uk_UA/app_uk_UA.arb b/lib/l10n/uk_UA/app_uk_UA.arb index 5eb5c487..da21c3af 100644 --- a/lib/l10n/uk_UA/app_uk_UA.arb +++ b/lib/l10n/uk_UA/app_uk_UA.arb @@ -46,7 +46,7 @@ "@aspectRatioSquare": {}, "allocateStock": "Виділити запас", "@allocateStock": {}, - "allocatedStock": "Allocated Stock", + "allocatedStock": "Виділений Запас", "@allocatedStock": {}, "appReleaseNotes": "Показати примітки до випуску", "@appReleaseNotes": {}, @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Сканування штрих-кодів призупинено", "@barodeScanPaused": {}, - "barcodeScanPause": "Tap to pause scanning", + "barcodeScanPause": "Торкніться або утримуйте, щоб призупинити сканування", "@barcodeScanPause": {}, "barcodeScanAssign": "Сканувати щоб призначити штрих-код", "@barcodeScanAssign": {}, @@ -228,11 +228,11 @@ "@delete": {}, "deleteFailed": "Помилка видалення", "@deleteFailed": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", + "deleteImageConfirmation": "Ви дійсно хочете видалити це зображення?", "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", + "deleteImageTooltip": "Видалити Зображення", "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", + "deleteImage": "Видалити Зображення", "@deleteImage": {}, "deletePart": "Видалити деталь", "@deletePart": {}, @@ -240,7 +240,7 @@ "@deletePartDetail": {}, "deleteSuccess": "Операція видалення пройшла успішно", "@deleteSuccess": {}, - "deliveryDate": "Delivery Date", + "deliveryDate": "Дата Доставки", "@deliveryDate": {}, "description": "Опис", "@description": {}, @@ -384,9 +384,9 @@ "@homeShowPo": {}, "homeShowPoDescription": "Показувати кнопку замовлення на домашньому екрані", "@homeShowPoDescription": {}, - "homeShowShipments": "Show Shipments", + "homeShowShipments": "Показати відправлення", "@homeShowShipments": {}, - "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "homeShowShipmentsDescription": "Показати відкладені відправлення на головному екрані", "@homeShowShipmentsDescription": {}, "homeShowSo": "Показати замовлення", "@homeShowSo": {}, @@ -454,15 +454,15 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Неправильна комбінація імені користувача та пароля", "@invalidUsernamePassword": {}, - "invoice": "Invoice", + "invoice": "Інвойс", "@invoice": {}, - "invoiceNumber": "Invoice Number", + "invoiceNumber": "Номер Інвойсу", "@invoiceNumber": {}, - "issue": "Issue", + "issue": "Видача", "@issue": {}, - "issueDate": "Issue Date", + "issueDate": "Дата Видачі", "@issueDate": {}, - "issueOrder": "Issue Order", + "issueOrder": "Оформити Замовлення", "@issueOrder": {}, "itemInLocation": "Товар вже на місці", "@itemInLocation": {}, @@ -472,9 +472,9 @@ "@itemUpdated": {}, "keywords": "Ключові слова", "@keywords": {}, - "labelDriver": "Label Driver", + "labelDriver": "Драйвер Етикеток", "@labelDriver": {}, - "labelSelectDriver": "Select Label Printer Driver", + "labelSelectDriver": "Вибрати Драйвер Принтера Етикеток", "@labelSelectDriver": {}, "labelPrinting": "Друк Ярликів", "@labelPrinting": {}, @@ -482,9 +482,9 @@ "@labelPrintingDetail": {}, "labelTemplate": "Шаблон Ярлика", "@labelTemplate": {}, - "labelSelectTemplate": "Select Label Template", + "labelSelectTemplate": "Вибрати Шаблон Етикетки", "@labelSelectTemplate": {}, - "labelSelectPrinter": "Select Label Printer", + "labelSelectPrinter": "Вибрати Принтер Етикеток", "@labelSelectPrinter": {}, "language": "Мова", "@language": {}, @@ -492,19 +492,19 @@ "@languageDefault": {}, "languageSelect": "Вибір мови", "@languageSelect": {}, - "lastStocktake": "Last Stocktake", + "lastStocktake": "Остання інвентаризація", "@lastStocktake": {}, "lastUpdated": "Останнє оновлення", "@lastUpdated": {}, "level": "Рівень", "@level": {}, - "lineItemAdd": "Add Line Item", + "lineItemAdd": "Додати Позицію", "@lineItemAdd": {}, - "lineItem": "Line Item", + "lineItem": "Позиція", "@lineItem": {}, - "lineItems": "Line Items", + "lineItems": "Позиції", "@lineItems": {}, - "lineItemUpdated": "Line item updated", + "lineItemUpdated": "Позицію оновлено", "@lineItemUpdated": {}, "locateItem": "Знайти елемент запасів", "@locateItem": {}, @@ -514,7 +514,7 @@ "@locationCreate": {}, "locationCreateDetail": "Створити нове розташування на складі", "@locationCreateDetail": {}, - "locationDefault": "Default Location", + "locationDefault": "Розташування за замовчуванням", "@locationDefault": {}, "locationNotSet": "Розташування не вказано", "@locationNotSet": {}, @@ -544,9 +544,9 @@ "@missingData": {}, "name": "Назва", "@name": {}, - "no": "No", + "no": "Ні", "@no": {}, - "notApplicable": "N/A", + "notApplicable": "Н/Д", "@notApplicable": {}, "notConnected": "Не під’єднано", "@notConnected": {}, @@ -564,19 +564,19 @@ "@noResults": {}, "noImageAvailable": "Немає доступного зображення", "@noImageAvailable": {}, - "noPricingAvailable": "No pricing available", + "noPricingAvailable": "Ціни не вказано", "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", + "noPricingDataFound": "Для цієї деталі не знайдено даних про ціну", "@noPricingDataFound": {}, - "noSubcategories": "No Subcategories", + "noSubcategories": "Немає Підкатегорій", "@noSubcategories": {}, - "noSubcategoriesAvailable": "No subcategories available", + "noSubcategoriesAvailable": "Немає доступних підкатегорій", "@noSubcategoriesAvailable": {}, "numberInvalid": "Некоректний номер", "@numberInvalid": {}, - "onOrder": "On Order", + "onOrder": "У замовленні", "@onOrder": {}, - "onOrderDetails": "Items currently on order", + "onOrderDetails": "Позиції в поточних замовленнях", "@onOrderDetails": {}, "orientation": "Орієнтація екрана", "@orientation": {}, @@ -632,7 +632,7 @@ "@partNoResults": {}, "partPricing": "Ціна деталі", "@partPricing": {}, - "partPricingSettingDetail": "Display part pricing information", + "partPricingSettingDetail": "Відображати інформацію про ціни на деталь", "@pricingSettingDetail": {}, "partSettings": "Налаштування позиції", "@partSettings": {}, @@ -652,7 +652,7 @@ "@partDetails": {}, "partNotes": "Примітки до позиції", "@partNotes": {}, - "partStock": "Part Stock", + "partStock": "Наявність На Складі", "@partStock": { "description": "part stock" }, @@ -660,7 +660,7 @@ "@password": {}, "passwordEmpty": "Пароль не може бути порожнім", "@passwordEmpty": {}, - "pending": "Pending", + "pending": "В очікуванні", "@pending": {}, "permissionAccountDenied": "Ваш обліковий запис не має необхідних прав для виконання цієї дії", "@permissionAccountDenied": {}, @@ -712,27 +712,27 @@ "@purchaseOrderConfirmScan": {}, "purchaseOrderConfirmScanDetail": "Підтвердити подробиці при скануванні в позицій", "@purchaseOrderConfirmScanDetail": {}, - "purchaseOrderEnable": "Enable Purchase Orders", + "purchaseOrderEnable": "Увімкнути Закупівлю", "@purchaseOrderEnable": {}, - "purchaseOrderEnableDetail": "Enable purchase order functionality", + "purchaseOrderEnableDetail": "Увімкнути функціонал закупівлі", "@purchaseOrderEnableDetail": {}, - "purchaseOrderShowCamera": "Camera Shortcut", + "purchaseOrderShowCamera": "Швидкий Доступ до Камери", "@purchaseOrderShowCamera": {}, - "purchaseOrderShowCameraDetail": "Enable image upload shortcut on purchase order screen", + "purchaseOrderShowCameraDetail": "Увімкнути ярлик для завантаження зображень на екрані закупівель", "@purchaseOrderShowCameraDetail": {}, - "purchaseOrder": "Purchase Order", + "purchaseOrder": "Замовлення на Закупівлю", "@purchaseOrder": {}, - "purchaseOrderCreate": "New Purchase Order", + "purchaseOrderCreate": "Нове Замовлення на Закупівлю", "@purchaseOrderCreate": {}, - "purchaseOrderEdit": "Edit Purchase Order", + "purchaseOrderEdit": "Редагувати Замовлення на Закупівлю", "@purchaseOrderEdit": {}, - "purchaseOrderSettings": "Purchase order settings", + "purchaseOrderSettings": "Налаштування замовлення на закупівлю", "@purchaseOrderSettings": {}, - "purchaseOrders": "Purchase Orders", + "purchaseOrders": "Закупівлі", "@purchaseOrders": {}, - "purchaseOrderUpdated": "Purchase order updated", + "purchaseOrderUpdated": "Замовлення на закупівлю оновлено", "@purchaseOrderUpdated": {}, - "purchasePrice": "Purchase Price", + "purchasePrice": "Закупівельна Ціна", "@purchasePrice": {}, "quantity": "Кількість", "@quantity": { @@ -740,7 +740,7 @@ }, "quantityAvailable": "Доступна кількість", "@quantityAvailable": {}, - "quantityEmpty": "Quantity is empty", + "quantityEmpty": "Кількість не вказана", "@quantityEmpty": {}, "quantityInvalid": "Некоректна кількість", "@quantityInvalid": {}, @@ -752,13 +752,13 @@ "@queryNoResults": {}, "received": "Отримано", "@received": {}, - "receivedFilterDetail": "Show received items", + "receivedFilterDetail": "Показувати отримані позиції", "@receivedFilterDetail": {}, - "receiveItem": "Receive Item", + "receiveItem": "Прийняти Позицію", "@receiveItem": {}, - "receivedItem": "Received Stock Item", + "receivedItem": "Отримана Складська Позиція", "@receivedItem": {}, - "reference": "Reference", + "reference": "Номер документа", "@reference": {}, "refresh": "Оновити", "@refresh": {}, @@ -766,7 +766,7 @@ "@rotateClockwise": {}, "refreshing": "Оновлення", "@refreshing": {}, - "rejected": "Rejected", + "rejected": "Відхилено", "@rejected": {}, "releaseNotes": "Замітки до випуску", "@releaseNotes": {}, From bf19ace3e93754c86d70b6cd9e0151cecf72896e Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 7 Jan 2026 10:38:10 +1100 Subject: [PATCH 37/40] New Crowdin updates (#742) * New translations app_en.arb (Turkish) * New translations app_en.arb (Persian) * New translations app_en.arb (Turkish) * New translations app_en.arb (Turkish) * New translations app_en.arb (Turkish) * New translations app_en.arb (Spanish, Mexico) * New translations app_en.arb (Turkish) * New translations app_en.arb (Chinese Simplified) * New translations app_en.arb (Turkish) * New translations app_en.arb (Danish) * New translations app_en.arb (Danish) * New translations app_en.arb (Danish) * New translations app_en.arb (Turkish) * New translations app_en.arb (Polish) * New translations app_en.arb (Romanian) * New translations app_en.arb (Romanian) * New translations app_en.arb (Danish) * New translations app_en.arb (Romanian) --- lib/l10n/da_DK/app_da_DK.arb | 936 +++++++++++++++++------------------ lib/l10n/es_MX/app_es_MX.arb | 6 +- lib/l10n/fa_IR/app_fa_IR.arb | 126 ++--- lib/l10n/pl_PL/app_pl_PL.arb | 2 +- lib/l10n/ro_RO/app_ro_RO.arb | 330 ++++++------ lib/l10n/tr_TR/app_tr_TR.arb | 110 ++-- lib/l10n/zh_CN/app_zh_CN.arb | 4 +- 7 files changed, 757 insertions(+), 757 deletions(-) diff --git a/lib/l10n/da_DK/app_da_DK.arb b/lib/l10n/da_DK/app_da_DK.arb index 697846b2..c05efb3e 100644 --- a/lib/l10n/da_DK/app_da_DK.arb +++ b/lib/l10n/da_DK/app_da_DK.arb @@ -42,11 +42,11 @@ "@aspectRatio3x2": {}, "aspectRatio4x3": "4:3", "@aspectRatio4x3": {}, - "aspectRatioSquare": "Square (1:1)", + "aspectRatioSquare": "Firkantet (1:1)", "@aspectRatioSquare": {}, "allocateStock": "Tildel lager", "@allocateStock": {}, - "allocatedStock": "Allocated Stock", + "allocatedStock": "Allokeret Lager", "@allocatedStock": {}, "appReleaseNotes": "Vis app-udgivelsesnoter", "@appReleaseNotes": {}, @@ -54,9 +54,9 @@ "@appSettings": {}, "appSettingsDetails": "Konfigurer InvenTree app-indstillinger", "@appSettingsDetails": {}, - "assignedToMe": "Assigned to Me", + "assignedToMe": "Tildelt til Mig", "@assignedToMe": {}, - "assignedToMeDetail": "Show orders which are assigned to me", + "assignedToMeDetail": "Vis ordrer som er tildelt mig", "@assignedToMeDetail": {}, "attachments": "Vedhæftede filer", "@attachments": {}, @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Stregkode skanning på pause", "@barodeScanPaused": {}, - "barcodeScanPause": "Tap to pause scanning", + "barcodeScanPause": "Tryk for at pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Scan for at tildele stregkode", "@barcodeScanAssign": {}, @@ -112,135 +112,135 @@ "@barcodeScanControllerDetail": {}, "barcodeScanDelay": "Forsinkelse Af Stregkode", "@barcodeScanDelay": {}, - "barcodeScanDelayDetail": "Delay between barcode scans", + "barcodeScanDelayDetail": "Forsinkelse mellem stregkode scanninger", "@barcodeScanDelayDetail": {}, - "barcodeScanGeneral": "Scan an InvenTree barcode", + "barcodeScanGeneral": "Scan en InvenTree stregkode", "@barcodeScanGeneral": {}, - "barcodeScanInItems": "Scan stock items into this location", + "barcodeScanInItems": "Scan lagervare ind på denne lokation", "@barcodeScanInItems": {}, - "barcodeScanLocation": "Scan stock location", + "barcodeScanLocation": "Scan lager lokation", "@barcodeScanLocation": {}, - "barcodeScanSingle": "Single Scan Mode", + "barcodeScanSingle": "Enkelt Scan Tilstand", "@barcodeScanSingle": {}, - "barcodeScanSingleDetail": "Pause barcode scanner after each scan", + "barcodeScanSingleDetail": "Sæt stregkodeskanneren på pause efter hver scanning", "@barcodeScanSingleDetail": {}, - "barcodeScanIntoLocationSuccess": "Scanned into location", + "barcodeScanIntoLocationSuccess": "Scannet ind i lokation", "@barcodeScanIntoLocationSuccess": {}, - "barcodeScanIntoLocationFailure": "Item not scanned in", + "barcodeScanIntoLocationFailure": "Element er ikke scannet ind", "@barcodeScanIntoLocationFailure": {}, - "barcodeScanItem": "Scan stock item", + "barcodeScanItem": "Scan lagervare", "@barcodeScanItem": {}, - "barcodeTones": "Barcode Tones", + "barcodeTones": "Stregkodetoner", "@barcodeTones": {}, - "barcodeUnassign": "Unassign Barcode", + "barcodeUnassign": "Frigiv Stregkode", "@barcodeUnassign": {}, - "barcodeUnknown": "Barcode is not recognized", + "barcodeUnknown": "Stregkode ikke genkendt", "@barcodeUnknown": {}, - "batchCode": "Batch Code", + "batchCode": "Batch kode", "@batchCode": {}, - "billOfMaterials": "Bill of Materials", + "billOfMaterials": "Stykliste", "@billOfMaterials": {}, - "bom": "BOM", + "bom": "Stykliste", "@bom": {}, - "bomEnable": "Display Bill of Materials", + "bomEnable": "Vis Stykliste", "@bomEnable": {}, - "build": "Build", + "build": "Byg", "@build": {}, - "building": "Building", + "building": "Bygger", "@building": {}, - "cameraCreationError": "Could not open camera controller", + "cameraCreationError": "Kunne ikke åbne kameracontrolleren", "@cameraCreationError": {}, - "cameraInternal": "Internal Camera", + "cameraInternal": "Internt Kamera", "@cameraInternal": {}, - "cameraInternalDetail": "Use internal camera to read barcodes", + "cameraInternalDetail": "Brug internt kamera til at læse stregkoder", "@cameraInternalDetail": {}, - "cancel": "Cancel", + "cancel": "Annuller", "@cancel": { "description": "Cancel" }, - "cancelOrder": "Cancel Order", + "cancelOrder": "Annuller ordre", "@cancelOrder": {}, - "category": "Category", + "category": "Kategori", "@category": {}, - "categoryCreate": "New Category", + "categoryCreate": "Ny kategori", "@categoryCreate": {}, - "categoryCreateDetail": "Create new part category", + "categoryCreateDetail": "Opret ny del kategori", "@categoryCreateDetail": {}, - "categoryUpdated": "Part category updated", + "categoryUpdated": "Del kategori opdateret", "@categoryUpdated": {}, - "company": "Company", + "company": "Firma", "@company": {}, - "companyAdd": "Add Company", + "companyAdd": "Tilføj firma", "@companyAdd": {}, - "companyEdit": "Edit Company", + "companyEdit": "Rediger virksomhed", "@companyEdit": {}, - "companyNoResults": "No companies matching query", + "companyNoResults": "Ingen virksomheder, der matcher forespørgsel", "@companyNoResults": {}, - "companyUpdated": "Company details updated", + "companyUpdated": "Virksomhedsoplysninger opdateret", "@companyUpdated": {}, - "companies": "Companies", + "companies": "Firmaer", "@companies": {}, - "complete": "Complete", + "complete": "Færdiggjort", "@complete": {}, - "completeOrder": "Complete Order", + "completeOrder": "Fuldfør ordre", "@completeOrder": {}, - "completionDate": "Completion Date", + "completionDate": "Færdiggørelsesdato", "@completionDate": {}, - "configureServer": "Configure server settings", + "configureServer": "Konfigurer serverindstillinger", "@configureServer": {}, - "confirmScan": "Confirm Transfer", + "confirmScan": "Bekræft overførsel", "@confirmScan": {}, - "confirmScanDetail": "Confirm stock transfer details when scanning barcodes", + "confirmScanDetail": "Bekræft lageroverførsel detaljer ved scanning stregkoder", "@confirmScanDetail": {}, - "connectionRefused": "Connection Refused", + "connectionRefused": "Forbindelse Afvist", "@connectionRefused": {}, - "count": "Count", + "count": "Antal", "@count": { "description": "Count" }, - "countStock": "Count Stock", + "countStock": "Tæl Lager", "@countStock": { "description": "Count Stock" }, - "credits": "Credits", + "credits": "Anerkendelser", "@credits": {}, - "crop": "Crop", + "crop": "Beskær", "@crop": {}, - "cropImage": "Crop Image", + "cropImage": "Beskær billede", "@cropImage": {}, - "customer": "Customer", + "customer": "Kunde", "@customer": {}, - "customers": "Customers", + "customers": "Kunder", "@customers": {}, - "customerReference": "Customer Reference", + "customerReference": "Kundens Reference", "@customerReference": {}, - "damaged": "Damaged", + "damaged": "Beskadiget", "@damaged": {}, - "colorScheme": "Color Scheme", + "colorScheme": "Farveskema", "@colorScheme": {}, - "colorSchemeDetail": "Select color scheme", + "colorSchemeDetail": "Vælg farveskema", "@colorSchemeDetail": {}, - "darkMode": "Dark Mode", + "darkMode": "Mørk tilstand", "@darkMode": {}, - "darkModeEnable": "Enable dark mode", + "darkModeEnable": "Aktiver mørk tilstand", "@darkModeEnable": {}, - "delete": "Delete", + "delete": "Slet", "@delete": {}, - "deleteFailed": "Delete operation failed", + "deleteFailed": "Sletning fejlede", "@deleteFailed": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", + "deleteImageConfirmation": "Er du sikker på at du vil slette dette billede?", "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", + "deleteImageTooltip": "Slet billede", "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", + "deleteImage": "Slet billede", "@deleteImage": {}, - "deletePart": "Delete Part", + "deletePart": "Slet Del", "@deletePart": {}, - "deletePartDetail": "Remove this part from the database", + "deletePartDetail": "Fjern denne del fra databasen", "@deletePartDetail": {}, "deleteSuccess": "Sletning lykkedes", "@deleteSuccess": {}, - "deliveryDate": "Delivery Date", + "deliveryDate": "Leveringsdato", "@deliveryDate": {}, "description": "Beskrivelse", "@description": {}, @@ -254,9 +254,9 @@ }, "documentation": "Dokumentation", "@documentation": {}, - "downloadComplete": "Download Complete", + "downloadComplete": "Download fuldført", "@downloadComplete": {}, - "downloadError": "Error downloading image", + "downloadError": "Fejl ved download af billede", "@downloadError": {}, "downloading": "Overfører fil", "@downloading": {}, @@ -264,7 +264,7 @@ "@edit": { "description": "edit" }, - "editAttachment": "Edit Attachment", + "editAttachment": "Rediger Vedhæftning", "@editAttachment": {}, "editCategory": "Rediger kategori", "@editCategory": {}, @@ -282,91 +282,91 @@ "@editItem": {}, "editLineItem": "Rediger Linjeelement", "@editLineItem": {}, - "email": "Email", + "email": "E-mail", "@email": {}, "enterPassword": "Indtast adgangskode", "@enterPassword": {}, "enterUsername": "Indtast brugernavn", "@enterUsername": {}, - "error": "Error", + "error": "Fejl", "@error": { "description": "Error" }, - "errorCreate": "Error creating database entry", + "errorCreate": "Fejl under oprettelse af database post", "@errorCreate": {}, - "errorDelete": "Error deleting database entry", + "errorDelete": "Fejl ved sletning af databasepost", "@errorDelete": {}, - "errorDetails": "Error Details", + "errorDetails": "Fejldetaljer", "@errorDetails": {}, - "errorFetch": "Error fetching data from server", + "errorFetch": "Fejl ved hentning af data fra server", "@errorFetch": {}, - "errorUserRoles": "Error requesting user roles from server", + "errorUserRoles": "Fejl ved forespørgsel af brugerroller fra server", "@errorUserRoles": {}, - "errorPluginInfo": "Error requesting plugin data from server", + "errorPluginInfo": "Fejl ved forespørgsel af plugin data fra server", "@errorPluginInfo": {}, - "errorReporting": "Error Reporting", + "errorReporting": "Fejlrapportering", "@errorReporting": {}, - "errorReportUpload": "Upload Error Reports", + "errorReportUpload": "Upload Fejlrapporter", "@errorReportUpload": {}, - "errorReportUploadDetails": "Upload anonymous error reports and crash logs", + "errorReportUploadDetails": "Upload anonyme fejlrapporter og nedbrudslogs", "@errorReportUploadDetails": {}, - "expiryDate": "Expiry Date", + "expiryDate": "Udløbsdato", "@expiryDate": {}, - "expiryExpired": "Expired", + "expiryExpired": "Udløbet", "@expiryExpired": {}, - "expiryStale": "Stale", + "expiryStale": "Forældet", "@expiryStale": {}, - "extraLineItem": "Extra Line Item", + "extraLineItem": "Ekstra linjepost", "@extraLineItem": {}, - "extraLineItems": "Extra Line Items", + "extraLineItems": "Ekstra linjeposter", "@extraLineItems": {}, "feedback": "Feedback", "@feedback": {}, - "feedbackError": "Error submitting feedback", + "feedbackError": "Indsendelse af feedback mislykkedes", "@feedbackError": {}, - "feedbackSuccess": "Feedback submitted", + "feedbackSuccess": "Feedback indsendt", "@feedbackSuccess": {}, "filterActive": "Aktiv", "@filterActive": {}, - "filterActiveDetail": "Show active parts", + "filterActiveDetail": "Vis aktive dele", "@filterActiveDetail": {}, - "filterAssembly": "Assembled", + "filterAssembly": "Samlede", "@filterAssembly": {}, - "filterAssemblyDetail": "Show assembled parts", + "filterAssemblyDetail": "Vis samledele", "@filterAssemblyDetail": {}, - "filterComponent": "Component", + "filterComponent": "Komponent", "@filterComponent": {}, - "filterComponentDetail": "Show component parts", + "filterComponentDetail": "Vis komponentdele", "@filterComponentDetail": {}, - "filterExternal": "External", + "filterExternal": "Ekstern", "@filterExternal": {}, - "filterExternalDetail": "Show stock in external locations", + "filterExternalDetail": "Vis lager på eksterne lokationer", "@filterExternalDetail": {}, "filterInStock": "På Lager", "@filterInStock": {}, - "filterInStockDetail": "Show parts which have stock", + "filterInStockDetail": "Vis dele som har lagerbeholdning", "@filterInStockDetail": {}, - "filterSerialized": "Serialized", + "filterSerialized": "Serialiseret", "@filterSerialized": {}, - "filterSerializedDetail": "Show serialized stock items", + "filterSerializedDetail": "Vis serialiserede lagervarer", "@filterSerializedDetail": {}, - "filterTemplate": "Template", + "filterTemplate": "Skabelon", "@filterTemplate": {}, - "filterTemplateDetail": "Show template parts", + "filterTemplateDetail": "Vis skabelon dele", "@filterTemplateDetail": {}, - "filterTrackable": "Trackable", + "filterTrackable": "Sporbar", "@filterTrackable": {}, - "filterTrackableDetail": "Show trackable parts", + "filterTrackableDetail": "Vis sporbare dele", "@filterTrackableDetail": {}, "filterVirtual": "Virtuel", "@filterVirtual": {}, - "filterVirtualDetail": "Show virtual parts", + "filterVirtualDetail": "Vis virtuelle dele", "@filterVirtualDetail": {}, - "filteringOptions": "Filtering Options", + "filteringOptions": "Filtreringsindstillinger", "@filteringOptions": {}, - "formatException": "Format Exception", + "formatException": "Format Undtagelse", "@formatException": {}, - "formatExceptionJson": "JSON data format exception", + "formatExceptionJson": "Undtagelse fra JSON-dataformat", "@formatExceptionJson": {}, "formError": "Formular Fejl", "@formError": {}, @@ -384,51 +384,51 @@ "@homeShowPo": {}, "homeShowPoDescription": "Vis indkøbsordreknap på startskærmen", "@homeShowPoDescription": {}, - "homeShowShipments": "Show Shipments", + "homeShowShipments": "Vis Forsendelser", "@homeShowShipments": {}, - "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "homeShowShipmentsDescription": "Vis afventende forsendelser på startskærmen", "@homeShowShipmentsDescription": {}, - "homeShowSo": "Show Sales Orders", + "homeShowSo": "Vis Salgs ordrer", "@homeShowSo": {}, - "homeShowSoDescription": "Show sales order button on home screen", + "homeShowSoDescription": "Vis salgsknap på startskærmen", "@homeShowSoDescription": {}, - "homeShowSubscribed": "Subscribed Parts", + "homeShowSubscribed": "Abonnerede Dele", "@homeShowSubscribed": {}, - "homeShowSubscribedDescription": "Show subscribed parts on home screen", + "homeShowSubscribedDescription": "Vis abonnerede dele på startskærmen", "@homeShowSubscsribedDescription": {}, "homeShowSuppliers": "Vis Leverandører", "@homeShowSuppliers": {}, - "homeShowSuppliersDescription": "Show suppliers button on home screen", + "homeShowSuppliersDescription": "Vis leverandørknap på startskærmen", "@homeShowSupplierDescription": {}, - "homeShowManufacturers": "Show Manufacturers", + "homeShowManufacturers": "Vis Producenter", "@homeShowManufacturers": {}, - "homeShowManufacturersDescription": "Show manufacturers button on home screen", + "homeShowManufacturersDescription": "Vis producent-knap på startskærmen", "@homeShowManufacturersDescription": {}, - "homeShowCustomers": "Show Customers", + "homeShowCustomers": "Vis Kunder", "@homeShowCustomers": {}, - "homeShowCustomersDescription": "Show customers button on home screen", + "homeShowCustomersDescription": "Vis kunde-knap på startskærmen", "@homeShowCustomersDescription": {}, - "imageUploadFailure": "Image upload failed", + "imageUploadFailure": "Upload af billede fejlede", "@imageUploadFailure": {}, - "imageUploadSuccess": "Image uploaded", + "imageUploadSuccess": "Billede uploadet", "@imageUploadSuccess": {}, "inactive": "Inaktiv", "@inactive": {}, - "inactiveCompany": "This company is marked as inactive", + "inactiveCompany": "Virksomheden er markeret som inaktiv", "@inactiveCompany": {}, - "inactiveDetail": "This part is marked as inactive", + "inactiveDetail": "Denne del er markeret som inaktiv", "@inactiveDetail": {}, - "includeSubcategories": "Include Subcategories", + "includeSubcategories": "Inkluder underkategorier", "@includeSubcategories": {}, - "includeSubcategoriesDetail": "Show results from subcategories", + "includeSubcategoriesDetail": "Vis resultater fra underkategorier", "@includeSubcategoriesDetail": {}, - "includeSublocations": "Include Sublocations", + "includeSublocations": "Inkluder underlokationer", "@includeSublocations": {}, - "includeSublocationsDetail": "Show results from sublocations", + "includeSublocationsDetail": "Vis resultater fra underkategorier", "@includeSublocationsDetail": {}, - "incompleteDetails": "Incomplete profile details", + "incompleteDetails": "Ukomplette profiloplysninger", "@incompleteDetails": {}, - "internalPartNumber": "Internal Part Number", + "internalPartNumber": "Internt Delnummer", "@internalPartNumber": {}, "info": "Info", "@info": {}, @@ -438,9 +438,9 @@ "@inProductionDetail": {}, "internalPart": "Intern Del", "@internalPart": {}, - "invalidHost": "Invalid hostname", + "invalidHost": "Ugyldigt hostnavn", "@invalidHost": {}, - "invalidHostDetails": "Provided hostname is not valid", + "invalidHostDetails": "Det angivne hostnavn er ikke gyldigt", "@invalidHostDetails": {}, "invalidPart": "Ugyldig Del", "@invalidPart": {}, @@ -454,754 +454,754 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Ugyldigt brugernavn/adgangskode-kombination", "@invalidUsernamePassword": {}, - "invoice": "Invoice", + "invoice": "Faktura", "@invoice": {}, - "invoiceNumber": "Invoice Number", + "invoiceNumber": "Fakturanummer", "@invoiceNumber": {}, - "issue": "Issue", + "issue": "Problem", "@issue": {}, - "issueDate": "Issue Date", + "issueDate": "Udstedelsesdato", "@issueDate": {}, - "issueOrder": "Issue Order", + "issueOrder": "Udstede Ordre", "@issueOrder": {}, - "itemInLocation": "Item already in location", + "itemInLocation": "Element allerede på placering", "@itemInLocation": {}, - "itemDeleted": "Item has been removed", + "itemDeleted": "Element er blevet fjernet", "@itemDeleted": {}, - "itemUpdated": "Item updated", + "itemUpdated": "Element opdateret", "@itemUpdated": {}, - "keywords": "Keywords", + "keywords": "Nøgleord", "@keywords": {}, "labelDriver": "Label Driver", "@labelDriver": {}, - "labelSelectDriver": "Select Label Printer Driver", + "labelSelectDriver": "Vælg Label Printer Driver", "@labelSelectDriver": {}, - "labelPrinting": "Label Printing", + "labelPrinting": "Label Udskriver", "@labelPrinting": {}, - "labelPrintingDetail": "Enable label printing", + "labelPrintingDetail": "Aktiver label udskrivning", "@labelPrintingDetail": {}, - "labelTemplate": "Label Template", + "labelTemplate": "Label Skabelon", "@labelTemplate": {}, - "labelSelectTemplate": "Select Label Template", + "labelSelectTemplate": "Vælg Label Skabelon", "@labelSelectTemplate": {}, - "labelSelectPrinter": "Select Label Printer", + "labelSelectPrinter": "Vælg Label Printer", "@labelSelectPrinter": {}, - "language": "Language", + "language": "Sprog", "@language": {}, - "languageDefault": "Default system language", + "languageDefault": "Standard systemsprog", "@languageDefault": {}, - "languageSelect": "Select Language", + "languageSelect": "Vælg sprog", "@languageSelect": {}, - "lastStocktake": "Last Stocktake", + "lastStocktake": "Sidste lageroptagelse", "@lastStocktake": {}, - "lastUpdated": "Last Updated", + "lastUpdated": "Senest opdateret", "@lastUpdated": {}, - "level": "Level", + "level": "Niveau", "@level": {}, - "lineItemAdd": "Add Line Item", + "lineItemAdd": "Tilføj Linjeelement", "@lineItemAdd": {}, - "lineItem": "Line Item", + "lineItem": "Linje Element", "@lineItem": {}, - "lineItems": "Line Items", + "lineItems": "Linjeelementer", "@lineItems": {}, - "lineItemUpdated": "Line item updated", + "lineItemUpdated": "Linje element opdateret", "@lineItemUpdated": {}, - "locateItem": "Locate stock item", + "locateItem": "Find lagervare", "@locateItem": {}, - "locateLocation": "Locate stock location", + "locateLocation": "Find lager lokation", "@locateLocation": {}, - "locationCreate": "New Location", + "locationCreate": "Ny lokation", "@locationCreate": {}, - "locationCreateDetail": "Create new stock location", + "locationCreateDetail": "Opret ny lagerlokation", "@locationCreateDetail": {}, - "locationDefault": "Default Location", + "locationDefault": "Standard lokation", "@locationDefault": {}, - "locationNotSet": "No location specified", + "locationNotSet": "Ingen lokation specificeret", "@locationNotSet": {}, - "locationUpdated": "Stock location updated", + "locationUpdated": "Lager lokation opdateret", "@locationUpdated": {}, - "login": "Login", + "login": "Log ind", "@login": {}, - "loginEnter": "Enter login details", + "loginEnter": "Indtast login detaljer", "@loginEnter": {}, - "loginEnterDetails": "Username and password are not stored locally", + "loginEnterDetails": "Brugernavn og adgangskode er ikke gemt lokalt", "@loginEnterDetails": {}, "link": "Link", "@link": {}, - "lost": "Lost", + "lost": "Mistet", "@lost": {}, - "manufacturerPart": "Manufacturer Part", + "manufacturerPart": "Producent Del", "@manufacturerPart": {}, - "manufacturerPartEdit": "Edit Manufacturer Part", + "manufacturerPartEdit": "Rediger Producent Del", "@manufacturerPartEdit": {}, - "manufacturerPartNumber": "Manufacturer Part Number", + "manufacturerPartNumber": "Producent Delnummer", "@manufacturerPartNumber": {}, - "manufacturer": "Manufacturer", + "manufacturer": "Producent", "@manufacturer": {}, - "manufacturers": "Manufacturers", + "manufacturers": "Producenter", "@manufacturers": {}, - "missingData": "Missing Data", + "missingData": "Mangler data", "@missingData": {}, - "name": "Name", + "name": "Navn", "@name": {}, - "no": "No", + "no": "Nej", "@no": {}, "notApplicable": "N/A", "@notApplicable": {}, - "notConnected": "Not Connected", + "notConnected": "Ikke Forbundet", "@notConnected": {}, - "notes": "Notes", + "notes": "Noter", "@notes": { "description": "Notes" }, - "notifications": "Notifications", + "notifications": "Notifikationer", "@notifications": {}, - "notificationsEmpty": "No unread notifications", + "notificationsEmpty": "Ingen ulæste notifikationer", "@notificationsEmpty": {}, - "noResponse": "No Response from Server", + "noResponse": "Intet svar fra server", "@noResponse": {}, - "noResults": "No Results", + "noResults": "Ingen Resultater", "@noResults": {}, - "noImageAvailable": "No image available", + "noImageAvailable": "Intet billede tilgængeligt", "@noImageAvailable": {}, - "noPricingAvailable": "No pricing available", + "noPricingAvailable": "Ingen priser tilgængelig", "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", + "noPricingDataFound": "Ingen prisdata fundet for denne del", "@noPricingDataFound": {}, - "noSubcategories": "No Subcategories", + "noSubcategories": "Ingen Underkategorier", "@noSubcategories": {}, - "noSubcategoriesAvailable": "No subcategories available", + "noSubcategoriesAvailable": "Ingen underkategorier tilgængelige", "@noSubcategoriesAvailable": {}, - "numberInvalid": "Invalid number", + "numberInvalid": "Ugyldigt nummer", "@numberInvalid": {}, - "onOrder": "On Order", + "onOrder": "På bestilling", "@onOrder": {}, - "onOrderDetails": "Items currently on order", + "onOrderDetails": "Elementer i øjeblikket på ordre", "@onOrderDetails": {}, - "orientation": "Screen Orientation", + "orientation": "Skærm Orientering", "@orientation": {}, - "orientationDetail": "Screen orientation (requires restart)", + "orientationDetail": "Skærm orientering (kræver genstart)", "@orientationDetail": {}, - "orientationLandscape": "Landscape", + "orientationLandscape": "Landskab", "@orientationLandscape": {}, - "orientationPortrait": "Portrait", + "orientationPortrait": "Portræt", "@orientationPortrait": {}, "orientationSystem": "System", "@orientationSystem": {}, - "outstanding": "Outstanding", + "outstanding": "Udestående", "@outstanding": {}, - "outstandingOrderDetail": "Show outstanding orders", + "outstandingOrderDetail": "Vis udestående ordrer", "@outstandingOrderDetail": {}, - "overdue": "Overdue", + "overdue": "Overskredet", "@overdue": {}, - "overdueDetail": "Show overdue orders", + "overdueDetail": "Vis forfaldne ordre", "@overdueDetail": {}, - "packaging": "Packaging", + "packaging": "Emballage", "@packaging": {}, - "packageName": "Package Name", + "packageName": "Pakkenavn", "@packageName": {}, - "parameters": "Parameters", + "parameters": "Parametre", "@parameters": {}, - "parametersSettingDetail": "Display part parameters", + "parametersSettingDetail": "Vis delparametre", "@parametersSettingDetail": {}, - "parent": "Parent", + "parent": "Overordnet", "@parent": {}, - "parentCategory": "Parent Category", + "parentCategory": "Overordnet kategori", "@parentCategory": {}, - "parentLocation": "Parent Location", + "parentLocation": "Overordnet Placering", "@parentLocation": {}, - "part": "Part", + "part": "Del", "@part": { "description": "Part (single)" }, - "partCreate": "New Part", + "partCreate": "Ny Del", "@partCreate": {}, - "partCreateDetail": "Create new part in this category", + "partCreateDetail": "Opret ny del i denne kategori", "@partCreateDetail": {}, - "partEdited": "Part updated", + "partEdited": "Del opdateret", "@partEdited": {}, - "parts": "Parts", + "parts": "Dele", "@parts": { "description": "Part (multiple)" }, - "partNotSalable": "Part not marked as salable", + "partNotSalable": "Del ikke markeret som salgbart", "@partNotSalable": {}, - "partsNone": "No Parts", + "partsNone": "Ingen Dele", "@partsNone": {}, - "partNoResults": "No parts matching query", + "partNoResults": "Ingen dele matcher forespørgsel", "@partNoResults": {}, - "partPricing": "Part Pricing", + "partPricing": "Del Prisfastsættelse", "@partPricing": {}, - "partPricingSettingDetail": "Display part pricing information", + "partPricingSettingDetail": "Vis delprisinformation", "@pricingSettingDetail": {}, - "partSettings": "Part Settings", + "partSettings": "Del Indstillinger", "@partSettings": {}, - "partsStarred": "Subscribed Parts", + "partsStarred": "Abonnerede Dele", "@partsStarred": {}, - "partsStarredNone": "No starred parts available", + "partsStarredNone": "Ingen markerede dele til rådighed", "@partsStarredNone": {}, - "partSuppliers": "Part Suppliers", + "partSuppliers": "Del Leverandører", "@partSuppliers": {}, - "partCategory": "Part Category", + "partCategory": "Del Kategori", "@partCategory": {}, - "partCategoryTopLevel": "Top level part category", + "partCategoryTopLevel": "Top niveau del kategori", "@partCategoryTopLevel": {}, - "partCategories": "Part Categories", + "partCategories": "Del Kategorier", "@partCategories": {}, - "partDetails": "Part Details", + "partDetails": "Del Detaljer", "@partDetails": {}, - "partNotes": "Part Notes", + "partNotes": "Del Noter", "@partNotes": {}, - "partStock": "Part Stock", + "partStock": "Del Lagerbeholdning", "@partStock": { "description": "part stock" }, - "password": "Password", + "password": "Adgangskode", "@password": {}, - "passwordEmpty": "Password cannot be empty", + "passwordEmpty": "Adgangskode kan ikke være tom", "@passwordEmpty": {}, - "pending": "Pending", + "pending": "Afventende", "@pending": {}, - "permissionAccountDenied": "Your account does not have the required permissions to perform this action", + "permissionAccountDenied": "Din konto har ikke de nødvendige tilladelser til at udføre denne handling", "@permissionAccountDenied": {}, - "permissionRequired": "Permission Required", + "permissionRequired": "Tilladelse påkrævet", "@permissionRequired": {}, - "phone": "Phone", + "phone": "Telefon", "@phone": {}, - "printLabel": "Print Label", + "printLabel": "Udskriv label", "@printLabel": {}, "plugin": "Plugin", "@plugin": {}, "pluginPrinter": "Printer", "@pluginPrinter": {}, - "pluginSupport": "Plugin Support Enabled", + "pluginSupport": "Plugin Support Aktiveret", "@pluginSupport": {}, - "pluginSupportDetail": "The server supports custom plugins", + "pluginSupportDetail": "Serveren understøtter brugerdefinerede plugins", "@pluginSupportDetail": {}, - "printLabelFailure": "Label printing failed", + "printLabelFailure": "Label udskrivning mislykkedes", "@printLabelFailure": {}, - "printLabelSuccess": "Label sent to printer", + "printLabelSuccess": "Label sendt til printer", "@printLabelSuccess": {}, - "profile": "Profile", + "profile": "Profil", "@profile": {}, - "profileAdd": "Add Server Profile", + "profileAdd": "Tilføj Serverprofil", "@profileAdd": {}, - "profileConnect": "Connect to Server", + "profileConnect": "Opretter forbindelse til server", "@profileConnect": {}, - "profileEdit": "Edit Server Profile", + "profileEdit": "Rediger serverprofil", "@profileEdit": {}, - "profileDelete": "Delete Server Profile", + "profileDelete": "Slet Server Profil", "@profileDelete": {}, - "profileLogout": "Logout Profile", + "profileLogout": "Log Af Profil", "@profileLogout": {}, - "profileName": "Profile Name", + "profileName": "Profilnavn", "@profileName": {}, - "profileNone": "No profiles available", + "profileNone": "Ingen profiler til rådighed", "@profileNone": {}, - "profileNotSelected": "No Profile Selected", + "profileNotSelected": "Ingen Profil Valgt", "@profileNotSelected": {}, - "profileSelect": "Select InvenTree Server", + "profileSelect": "Vælg InvenTree Server", "@profileSelect": {}, - "profileSelectOrCreate": "Select server or create a new profile", + "profileSelectOrCreate": "Vælg server eller opret ny profil", "@profileSelectOrCreate": {}, - "profileTapToCreate": "Tap to create or select a profile", + "profileTapToCreate": "Tryk for at oprette eller vælge en profil", "@profileTapToCreate": {}, - "projectCode": "Project Code", + "projectCode": "Projektkode", "@projectCode": {}, - "purchaseOrderConfirmScan": "Confirm Scan Data", + "purchaseOrderConfirmScan": "Bekræft Scanningsdata", "@purchaseOrderConfirmScan": {}, - "purchaseOrderConfirmScanDetail": "Confirm details when scanning in items", + "purchaseOrderConfirmScanDetail": "Bekræft detaljer ved ind scanning af elementer", "@purchaseOrderConfirmScanDetail": {}, - "purchaseOrderEnable": "Enable Purchase Orders", + "purchaseOrderEnable": "Aktive Indkøbsordrer", "@purchaseOrderEnable": {}, - "purchaseOrderEnableDetail": "Enable purchase order functionality", + "purchaseOrderEnableDetail": "Aktiver salgsordre funktionalitet", "@purchaseOrderEnableDetail": {}, - "purchaseOrderShowCamera": "Camera Shortcut", + "purchaseOrderShowCamera": "Genvej Til Kamera", "@purchaseOrderShowCamera": {}, - "purchaseOrderShowCameraDetail": "Enable image upload shortcut on purchase order screen", + "purchaseOrderShowCameraDetail": "Aktiver genvej til billedupload på købsordre skærmen", "@purchaseOrderShowCameraDetail": {}, - "purchaseOrder": "Purchase Order", + "purchaseOrder": "Købsordre", "@purchaseOrder": {}, - "purchaseOrderCreate": "New Purchase Order", + "purchaseOrderCreate": "Ny købsordre", "@purchaseOrderCreate": {}, - "purchaseOrderEdit": "Edit Purchase Order", + "purchaseOrderEdit": "Rediger Købsordre", "@purchaseOrderEdit": {}, - "purchaseOrderSettings": "Purchase order settings", + "purchaseOrderSettings": "Indstillinger for indkøbsordre", "@purchaseOrderSettings": {}, - "purchaseOrders": "Purchase Orders", + "purchaseOrders": "Indkøbsordrer", "@purchaseOrders": {}, - "purchaseOrderUpdated": "Purchase order updated", + "purchaseOrderUpdated": "Købsordre opdateret", "@purchaseOrderUpdated": {}, - "purchasePrice": "Purchase Price", + "purchasePrice": "Købspris", "@purchasePrice": {}, - "quantity": "Quantity", + "quantity": "Antal", "@quantity": { "description": "Quantity" }, - "quantityAvailable": "Quantity Available", + "quantityAvailable": "Antal Tilgængelig", "@quantityAvailable": {}, - "quantityEmpty": "Quantity is empty", + "quantityEmpty": "Antal er tomt", "@quantityEmpty": {}, - "quantityInvalid": "Quantity is invalid", + "quantityInvalid": "Antal er ugyldigt", "@quantityInvalid": {}, - "quantityPositive": "Quantity must be positive", + "quantityPositive": "Antallet skal være positivt", "@quantityPositive": {}, - "queryEmpty": "Enter search query", + "queryEmpty": "Indtast søgestreng", "@queryEmpty": {}, - "queryNoResults": "No results for query", + "queryNoResults": "Ingen resultater fundet", "@queryNoResults": {}, - "received": "Received", + "received": "Modtaget", "@received": {}, - "receivedFilterDetail": "Show received items", + "receivedFilterDetail": "Vis modtagne elementer", "@receivedFilterDetail": {}, - "receiveItem": "Receive Item", + "receiveItem": "Modtage Element", "@receiveItem": {}, - "receivedItem": "Received Stock Item", + "receivedItem": "Modtaget Lagervare", "@receivedItem": {}, "reference": "Reference", "@reference": {}, - "refresh": "Refresh", + "refresh": "Genindlæs", "@refresh": {}, - "rotateClockwise": "Rotate 90° clockwise", + "rotateClockwise": "Roter 90° med uret", "@rotateClockwise": {}, - "refreshing": "Refreshing", + "refreshing": "Genindlæser", "@refreshing": {}, - "rejected": "Rejected", + "rejected": "Afvist", "@rejected": {}, "releaseNotes": "Release Notes", "@releaseNotes": {}, - "remove": "Remove", + "remove": "Fjern", "@remove": { "description": "remove" }, - "removeStock": "Remove Stock", + "removeStock": "Fjern Lagervarer", "@removeStock": { "description": "remove stock" }, - "reportBug": "Report Bug", + "reportBug": "Rapporter fejl", "@reportBug": {}, - "reportBugDescription": "Submit bug report (requires GitHub account)", + "reportBugDescription": "Indsend fejlrapport (kræver GitHub konto)", "@reportBugDescription": {}, - "responsible": "Responsible", + "responsible": "Ansvarlig", "@responsible": {}, - "results": "Results", + "results": "Resultater", "@results": {}, - "request": "Request", + "request": "Anmodning", "@request": {}, - "requestFailed": "Request Failed", + "requestFailed": "Anmodning fejlede", "@requestFailed": {}, - "requestSuccessful": "Request successful", + "requestSuccessful": "Anmodning succesfuld", "@requestSuccessful": {}, - "requestingData": "Requesting Data", + "requestingData": "Anmoder Data", "@requestingData": {}, - "required": "Required", + "required": "Påkrævet", "@required": { "description": "This field is required" }, - "response400": "Bad Request", + "response400": "Dårlig anmodning", "@response400": {}, - "response401": "Unauthorized", + "response401": "Uautoriseret", "@response401": {}, - "response403": "Permission Denied", + "response403": "Adgang nægtet", "@response403": {}, - "response404": "Resource Not Found", + "response404": "Ressource Ikke Fundet", "@response404": {}, - "response405": "Method Not Allowed", + "response405": "Metode ikke tilladt", "@response405": {}, - "response429": "Too Many Requests", + "response429": "For Mange Anmodninger", "@response429": {}, - "response500": "Internal Server Error", + "response500": "Intern serverfejl", "@response500": {}, - "response501": "Not Implemented", + "response501": "Ikke implementeret", "@response501": {}, - "response502": "Bad Gateway", + "response502": "Dårlig Gateway", "@response502": {}, - "response503": "Service Unavailable", + "response503": "Service er utilgængelig", "@response503": {}, "response504": "Gateway Timeout", "@response504": {}, - "response505": "HTTP Version Not Supported", + "response505": "HTTP-version understøttes ikke", "@response505": {}, - "responseData": "Response data", + "responseData": "Svardata", "@responseData": {}, - "responseInvalid": "Invalid Response Code", + "responseInvalid": "Ugyldig Svar Kode", "@responseInvalid": {}, - "responseUnknown": "Unknown Response", + "responseUnknown": "Ukendt Svar", "@responseUnknown": {}, - "result": "Result", + "result": "Resultat", "@result": { "description": "" }, - "returned": "Returned", + "returned": "Returneret", "@returned": {}, - "salesOrder": "Sales Order", + "salesOrder": "Salgsordrer", "@salesOrder": {}, - "salesOrders": "Sales Orders", + "salesOrders": "Salgsordrer", "@salesOrders": {}, - "salesOrderEnable": "Enable Sales Orders", + "salesOrderEnable": "Aktiver Salgsordrer", "@salesOrderEnable": {}, - "salesOrderEnableDetail": "Enable sales order functionality", + "salesOrderEnableDetail": "Aktiver salgsordre funktionalitet", "@salesOrderEnableDetail": {}, - "salesOrderShowCamera": "Camera Shortcut", + "salesOrderShowCamera": "Genvej Til Kamera", "@salesOrderShowCamera": {}, - "salesOrderShowCameraDetail": "Enable image upload shortcut on sales order screen", + "salesOrderShowCameraDetail": "Aktiver genvej til billedupload til salgsordre på skærmen", "@salesOrderShowCameraDetail": {}, - "salesOrderSettings": "Sales order settings", + "salesOrderSettings": "Indstillinger for salgsordre", "@salesOrderSettings": {}, - "salesOrderCreate": "New Sales Order", + "salesOrderCreate": "Ny salgsordre", "@saleOrderCreate": {}, - "salesOrderEdit": "Edit Sales Order", + "salesOrderEdit": "Rediger Salgsordre", "@salesOrderEdit": {}, - "salesOrderUpdated": "Sales order updated", + "salesOrderUpdated": "Salgs ordre opdateret", "@salesOrderUpdated": {}, - "save": "Save", + "save": "Gem", "@save": { "description": "Save" }, - "scanBarcode": "Scan Barcode", + "scanBarcode": "Scan stregkode", "@scanBarcode": {}, - "scanSupplierPart": "Scan supplier part barcode", + "scanSupplierPart": "Scan leverandørdel stregkode", "@scanSupplierPart": {}, - "scanIntoLocation": "Scan Into Location", + "scanIntoLocation": "Scan Til Placering", "@scanIntoLocation": {}, - "scanIntoLocationDetail": "Scan this item into location", + "scanIntoLocationDetail": "Skan dette element til placering", "@scanIntoLocationDetail": {}, - "scannerExternal": "External Scanner", + "scannerExternal": "Ekstern Scanner", "@scannerExternal": {}, - "scannerExternalDetail": "Use external scanner to read barcodes (wedge mode)", + "scannerExternalDetail": "Brug ekstern scanner til at læse stregkoder (kiletilstand)", "@scannerExternalDetail": {}, - "scanReceivedParts": "Scan Received Parts", + "scanReceivedParts": "Scan Modtagne Dele", "@scanReceivedParts": {}, - "search": "Search", + "search": "Søg", "@search": { "description": "search" }, - "searching": "Searching", + "searching": "Søger", "@searching": {}, - "searchLocation": "Search for location", + "searchLocation": "Søg efter lokation", "@searchLocation": {}, - "searchParts": "Search Parts", + "searchParts": "Søg efter dele", "@searchParts": {}, - "searchStock": "Search Stock", + "searchStock": "Søg Lager", "@searchStock": {}, - "select": "Select", + "select": "Vælg", "@select": {}, - "selectFile": "Select File", + "selectFile": "Vælg fil", "@selectFile": {}, - "selectImage": "Select Image", + "selectImage": "Vælg billede", "@selectImage": {}, - "selectLocation": "Select a location", + "selectLocation": "Vælg en placering", "@selectLocation": {}, "send": "Send", "@send": {}, - "serialNumber": "Serial Number", + "serialNumber": "Serienummer", "@serialNumber": {}, - "serialNumbers": "Serial Numbers", + "serialNumbers": "Serienummer", "@serialNumbers": {}, "server": "Server", "@server": {}, - "serverAddress": "Server Address", + "serverAddress": "Serveradresse", "@serverAddress": {}, - "serverApiRequired": "Required API Version", + "serverApiRequired": "Kræver API-version", "@serverApiRequired": {}, "serverApiVersion": "Server API Version", "@serverApiVersion": {}, - "serverAuthenticationError": "Authentication Error", + "serverAuthenticationError": "Autentificeringsfejl", "@serverAuthenticationError": {}, - "serverCertificateError": "Cerficate Error", + "serverCertificateError": "Certifikatfejl", "@serverCertificateError": {}, - "serverCertificateInvalid": "Server HTTPS certificate is invalid", + "serverCertificateInvalid": "Server HTTPS certifikat er ugyldigt", "@serverCertificateInvalid": {}, - "serverConnected": "Connected to Server", + "serverConnected": "Forbundet til server", "@serverConnected": {}, - "serverConnecting": "Connecting to server", + "serverConnecting": "Opretter forbindelse til server", "@serverConnecting": {}, - "serverCouldNotConnect": "Could not connect to server", + "serverCouldNotConnect": "Kunne ikke forbinde til server", "@serverCouldNotConnect": {}, - "serverEmpty": "Server cannot be empty", + "serverEmpty": "Serveren kan ikke være tom", "@serverEmpty": {}, - "serverError": "Server Error", + "serverError": "Serverfejl", "@serverError": {}, - "serverDetails": "Server Details", + "serverDetails": "Server detaljer", "@serverDetails": {}, - "serverMissingData": "Server response missing required fields", + "serverMissingData": "Server svar mangler obligatoriske felter", "@serverMissingData": {}, - "serverOld": "Old Server Version", + "serverOld": "Gammel Server Version", "@serverOld": {}, - "serverSettings": "Server Settings", + "serverSettings": "Server indstillinger", "@serverSettings": {}, - "serverStart": "Server must start with http[s]", + "serverStart": "Server skal starte med http[s]", "@serverStart": {}, - "settings": "Settings", + "settings": "Indstillinger", "@settings": {}, - "serverInstance": "Server Instance", + "serverInstance": "Server Instans", "@serverInstance": {}, - "serverNotConnected": "Server not connected", + "serverNotConnected": "Server ikke forbundet", "@serverNotConnected": {}, - "serverNotSelected": "Server not selected", + "serverNotSelected": "Server ikke valgt", "@serverNotSelected": {}, - "shipment": "Shipment", + "shipment": "Forsendelse", "@shipment": {}, - "shipments": "Shipments", + "shipments": "Forsendelser", "@shipments": {}, - "shipmentsPending": "Pending Shipments", + "shipmentsPending": "Afventer Forsendelser", "@shipmentsPending": {}, - "shipmentAdd": "Add Shipment", + "shipmentAdd": "Tilføj Forsendelse", "@shipmentAdd": {}, - "shipmentCheck": "Check Shipment", + "shipmentCheck": "Tjek Forsendelse", "@shipmentCheck": {}, - "shipmentCheckDetail": "Mark this shipment as checked", + "shipmentCheckDetail": "Marker denne forsendelse som kontrolleret", "@shipmentCheckDetail": {}, - "shipmentChecked": "Shipment Checked", + "shipmentChecked": "Forsendelse Kontrolleret", "@shipmentChecked": {}, - "shipmentDate": "Shipment Date", + "shipmentDate": "Afsendelsesdato", "@shipmentDate": {}, - "shipmentEdit": "Edit Shipment", + "shipmentEdit": "Rediger Forsendelse", "@shipmentEdit": {}, - "shipmentReference": "Shipment Reference", + "shipmentReference": "Forsendelse Reference", "@shipmentReference": {}, - "shipmentSend": "Send Shipment", + "shipmentSend": "Send Forsendelse", "@shipmentSend": {}, - "shipmentUncheck": "Uncheck Shipment", + "shipmentUncheck": "Afmarkér Forsendelse", "@shipmentUncheck": {}, - "shipmentUncheckDetail": "Mark this shipment as unchecked", + "shipmentUncheckDetail": "Marker denne forsendelse som afmarkeret", "@shipmentUncheckDetail": {}, - "shipmentUpdated": "Shipment Updated", + "shipmentUpdated": "Forsendelse Opdateret", "@shipmentUpdated": {}, - "shipped": "Shipped", + "shipped": "Afsendt", "@shipped": {}, - "sku": "SKU", + "sku": "Lagerbeholdning", "@sku": {}, - "sounds": "Sounds", + "sounds": "Lyde", "@sounds": {}, - "soundOnBarcodeAction": "Play audible tone on barcode action", + "soundOnBarcodeAction": "Afspil hørbar tone ved stregkodehandling", "@soundOnBarcodeAction": {}, - "soundOnServerError": "Play audible tone on server error", + "soundOnServerError": "Afspil akustisk tone ved serverfejl", "@soundOnServerError": {}, - "startDate": "Start Date", + "startDate": "Startdato", "@startDate": {}, "status": "Status", "@status": {}, - "statusCode": "Status Code", + "statusCode": "Status Kode", "@statusCode": {}, - "stock": "Stock", + "stock": "Lager", "@stock": { "description": "stock" }, - "stockDetails": "Current available stock quantity", + "stockDetails": "Aktuel disponibel lagermængde", "@stockDetails": {}, - "stockItem": "Stock Item", + "stockItem": "Lagervarer", "@stockItem": { "description": "stock item title" }, - "stockItems": "Stock Items", + "stockItems": "Lagervarer", "@stockItems": {}, - "stockItemCreate": "New Stock Item", + "stockItemCreate": "Ny Lagervare", "@stockItemCreate": {}, - "stockItemCreateDetail": "Create new stock item in this location", + "stockItemCreateDetail": "Opret ny lagervare på denne lokation", "@stockItemCreateDetail": {}, - "stockItemDelete": "Delete Stock Item", + "stockItemDelete": "Slet Lagervare", "@stockItemDelete": {}, - "stockItemDeleteConfirm": "Are you sure you want to delete this stock item?", + "stockItemDeleteConfirm": "Er du sikker på, at du vil slette denne lagervare?", "@stockItemDeleteConfirm": {}, - "stockItemDeleteFailure": "Could not delete stock item", + "stockItemDeleteFailure": "Kunne ikke slette lagervare", "@stockItemDeleteFailure": {}, - "stockItemDeleteSuccess": "Stock item deleted", + "stockItemDeleteSuccess": "Lagervare slettet", "@stockItemDeleteSuccess": {}, - "stockItemHistory": "Stock History", + "stockItemHistory": "Lager Historik", "@stockItemHistory": {}, - "stockItemHistoryDetail": "Display historical stock tracking information", + "stockItemHistoryDetail": "Vis historisk lagersporings information", "@stockItemHistoryDetail": {}, - "stockItemTransferred": "Stock item transferred", + "stockItemTransferred": "Lagervare overført", "@stockItemTransferred": {}, - "stockItemUpdated": "Stock item updated", + "stockItemUpdated": "Lagervare opdateret", "@stockItemUpdated": {}, - "stockItemsNotAvailable": "No stock items available", + "stockItemsNotAvailable": "Ingen lagervarer tilgængelige", "@stockItemsNotAvailable": {}, - "stockItemNotes": "Stock Item Notes", + "stockItemNotes": "Lager Vare Noter", "@stockItemNotes": {}, - "stockItemUpdateSuccess": "Stock item updated", + "stockItemUpdateSuccess": "Lagervare opdateret", "@stockItemUpdateSuccess": {}, - "stockItemUpdateFailure": "Stock item update failed", + "stockItemUpdateFailure": "Lagervare opdatering mislykkedes", "@stockItemUpdateFailure": {}, - "stockLocation": "Stock Location", + "stockLocation": "Lagerlokationer", "@stockLocation": { "description": "stock location" }, - "stockLocations": "Stock Locations", + "stockLocations": "Lagerlokationer", "@stockLocations": {}, - "stockTopLevel": "Top level stock location", + "stockTopLevel": "Top niveau lager lokation", "@stockTopLevel": {}, - "strictHttps": "Use Strict HTTPS", + "strictHttps": "Brug Streng HTTPS", "@strictHttps": {}, - "strictHttpsDetails": "Enforce strict checking of HTTPs certificates", + "strictHttpsDetails": "Håndhæve streng kontrol af HTTPS-certifikater", "@strictHttpsDetails": {}, - "subcategory": "Subcategory", + "subcategory": "Underkategori", "@subcategory": {}, - "subcategories": "Subcategories", + "subcategories": "Underkategorier", "@subcategories": {}, - "sublocation": "Sublocation", + "sublocation": "Under lokation", "@sublocation": {}, - "sublocations": "Sublocations", + "sublocations": "Under lokationer", "@sublocations": {}, - "sublocationNone": "No Sublocations", + "sublocationNone": "Ingen under lokationer", "@sublocationNone": {}, - "sublocationNoneDetail": "No sublocations available", + "sublocationNoneDetail": "Ingen under lokationer tilgængelige", "@sublocationNoneDetail": {}, - "submitFeedback": "Submit Feedback", + "submitFeedback": "Indsend feedback", "@submitFeedback": {}, - "suppliedParts": "Supplied Parts", + "suppliedParts": "Leveret Dele", "@suppliedParts": {}, - "supplier": "Supplier", + "supplier": "Leverandør", "@supplier": {}, - "supplierPart": "Supplier Part", + "supplierPart": "Leverandør Del", "@supplierPart": {}, - "supplierPartEdit": "Edit Supplier Part", + "supplierPartEdit": "Rediger Leverandør Del", "@supplierPartEdit": {}, - "supplierPartNumber": "Supplier Part Number", + "supplierPartNumber": "Leverandør Delnummer", "@supplierPartNumber": {}, - "supplierPartUpdated": "Supplier Part Updated", + "supplierPartUpdated": "Leverandør Del Opdateret", "@supplierPartUpdated": {}, - "supplierParts": "Supplier Parts", + "supplierParts": "Leverandør Dele", "@supplierParts": {}, - "suppliers": "Suppliers", + "suppliers": "Leverandør", "@suppliers": {}, - "supplierReference": "Supplier Reference", + "supplierReference": "Leverandør Reference", "@supplierReference": {}, - "switchCamera": "Switch Camera", + "switchCamera": "Skift Kamera", "@switchCamera": {}, - "takePicture": "Take Picture", + "takePicture": "Tag billede", "@takePicture": {}, - "targetDate": "Target Date", + "targetDate": "Måldato", "@targetDate": {}, - "templatePart": "Parent Template Part", + "templatePart": "Overordnet Skabelon Del", "@templatePart": {}, - "testName": "Test Name", + "testName": "Test navn", "@testName": {}, - "testPassedOrFailed": "Test passed or failed", + "testPassedOrFailed": "Test bestået eller fejlet", "@testPassedOrFailed": {}, - "testsRequired": "Required Tests", + "testsRequired": "Påkrævede Test", "@testsRequired": {}, - "testResults": "Test Results", + "testResults": "Testresultater", "@testResults": { "description": "" }, - "testResultsDetail": "Display stock item test results", + "testResultsDetail": "Vis testresultater for lagervarer", "@testResultsDetail": {}, - "testResultAdd": "Add Test Result", + "testResultAdd": "Tilføj Testresultat", "@testResultAdd": {}, - "testResultNone": "No Test Results", + "testResultNone": "Ingen Testresultater", "@testResultNone": {}, - "testResultNoneDetail": "No test results available", + "testResultNoneDetail": "Ingen testresultater tilgængelige", "@testResultNoneDetail": {}, - "testResultUploadFail": "Error uploading test result", + "testResultUploadFail": "Fejl under upload af testresultat", "@testResultUploadFail": {}, - "testResultUploadPass": "Test result uploaded", + "testResultUploadPass": "Test resultat uploadet", "@testResultUploadPass": {}, "timeout": "Timeout", "@timeout": { "description": "" }, - "toggleTorch": "Toggle Torch", + "toggleTorch": "Tænd/sluk lys", "@toggleTorch": {}, - "tokenError": "Token Error", + "tokenError": "Token Fejl", "@tokenError": {}, - "tokenMissing": "Missing Token", + "tokenMissing": "Mangler Token", "@tokenMissing": {}, - "tokenMissingFromResponse": "Access token missing from response", + "tokenMissingFromResponse": "Adgangstoken mangler fra svar", "@tokenMissingFromResponse": {}, - "totalPrice": "Total Price", + "totalPrice": "Total Pris", "@totalPrice": {}, - "trackingNumber": "Tracking Number", + "trackingNumber": "Sporingsnummer", "@trackingNumber": {}, - "transfer": "Transfer", + "transfer": "Overfør", "@transfer": { "description": "transfer" }, - "transferStock": "Transfer Stock", + "transferStock": "Overfør Lager", "@transferStock": { "description": "transfer stock" }, - "transferStockDetail": "Transfer item to a different location", + "transferStockDetail": "Overfør element til en anden lokation", "@transferStockDetail": {}, - "transferStockLocation": "Transfer Stock Location", + "transferStockLocation": "Overføre lager lokation", "@transferStockLocation": {}, - "transferStockLocationDetail": "Transfer this stock location into another", + "transferStockLocationDetail": "Overfør denne lager lokation til en anden", "@transferStockLocationDetail": {}, - "translate": "Translate", + "translate": "Oversæt", "@translate": {}, - "translateHelp": "Help translate the InvenTree app", + "translateHelp": "Hjælp med at oversætte InvenTree appen", "@translateHelp": {}, - "unavailable": "Unavailable", + "unavailable": "Utilgængelig", "@unavailable": {}, - "unavailableDetail": "Item is not available", + "unavailableDetail": "Elementet er ikke tilgængeligt", "@unavailableDetail": {}, - "unitPrice": "Unit Price", + "unitPrice": "Enhedspris", "@unitPrice": {}, - "units": "Units", + "units": "Enheder", "@units": {}, - "unknownResponse": "Unknown Response", + "unknownResponse": "Ukendt Svar", "@unknownResponse": {}, "upload": "Upload", "@upload": {}, - "uploadFailed": "File upload failed", + "uploadFailed": "File upload mislykkedes", "@uploadFailed": {}, - "uploadSuccess": "File uploaded", + "uploadSuccess": "Fil uploadet", "@uploadSuccess": {}, - "uploadImage": "Upload Image", + "uploadImage": "Upload billede", "@uploadImage": {}, - "usedIn": "Used In", + "usedIn": "Brugt I", "@usedIn": {}, - "usedInDetails": "Assemblies which require this part", + "usedInDetails": "Samlinger som kræver denne del", "@usedInDetails": {}, - "username": "Username", + "username": "Brugernavn", "@username": {}, - "usernameEmpty": "Username cannot be empty", + "usernameEmpty": "Brugernavn kan ikke være tomt", "@usernameEmpty": {}, - "value": "Value", + "value": "Værdi", "@value": { "description": "value" }, - "valueCannotBeEmpty": "Value cannot be empty", + "valueCannotBeEmpty": "Værdien kan ikke være tom", "@valueCannotBeEmpty": {}, - "valueRequired": "Value is required", + "valueRequired": "Værdi er påkrævet", "@valueRequired": {}, - "variants": "Variants", + "variants": "Varianter", "@variants": {}, "version": "Version", "@version": {}, - "viewSupplierPart": "View Supplier Part", + "viewSupplierPart": "Vis Leverandør Del", "@viewSupplierPart": {}, - "website": "Website", + "website": "Hjemmeside", "@website": {}, - "yes": "Yes", + "yes": "Ja", "@yes": {}, - "price": "Price", + "price": "Pris", "@price": {}, - "priceRange": "Price Range", + "priceRange": "Prisklasse", "@priceRange": {}, - "priceOverrideMin": "Minimum Price Override", + "priceOverrideMin": "Tilsidesættelse af minimumspris", "@priceOverrideMin": {}, - "priceOverrideMax": "Maximum Price Override", + "priceOverrideMax": "Tilsidesættelse af maksimalpris", "@priceOverrideMax": {}, - "salePrice": "Sale Price", + "salePrice": "Salgspris", "@salePrice": {}, - "saleHistory": "Sale History", + "saleHistory": "Salgs Historik", "@saleHistory": {}, - "supplierPricing": "Supplier Pricing", + "supplierPricing": "Leverandør Pris", "@supplierPricing": {}, - "bomCost": "BOM Cost", + "bomCost": "Stykliste Pris", "@bomCost": {}, - "internalCost": "Internal Cost", + "internalCost": "Intern Omkostning", "@internalCost": {}, - "variantCost": "Variant Cost", + "variantCost": "Variant Pris", "@variantCost": {}, - "overallPricing": "Overall Pricing", + "overallPricing": "Samlet prisfastsættelse", "@overallPricing": {}, - "pricingOverrides": "Pricing Overrides", + "pricingOverrides": "Tilsidesætter Prisfastsættelse", "@pricingOverrides": {}, - "currency": "Currency", + "currency": "Valuta", "@currency": {}, - "priceBreaks": "Price Breaks", + "priceBreaks": "Prispauser", "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/es_MX/app_es_MX.arb b/lib/l10n/es_MX/app_es_MX.arb index 4f0ec84f..11970823 100644 --- a/lib/l10n/es_MX/app_es_MX.arb +++ b/lib/l10n/es_MX/app_es_MX.arb @@ -962,7 +962,7 @@ "@shipmentReference": {}, "shipmentSend": "Send Shipment", "@shipmentSend": {}, - "shipmentUncheck": "Uncheck Shipment", + "shipmentUncheck": "Deseleccionar Envío", "@shipmentUncheck": {}, "shipmentUncheckDetail": "Mark this shipment as unchecked", "@shipmentUncheckDetail": {}, @@ -1068,7 +1068,7 @@ "@suppliers": {}, "supplierReference": "Referencia del proveedor", "@supplierReference": {}, - "switchCamera": "Switch Camera", + "switchCamera": "Cambiar Cámara", "@switchCamera": {}, "takePicture": "Tomar una foto", "@takePicture": {}, @@ -1148,7 +1148,7 @@ "@uploadFailed": {}, "uploadSuccess": "Archivo subido", "@uploadSuccess": {}, - "uploadImage": "Upload Image", + "uploadImage": "Subir Imagen", "@uploadImage": {}, "usedIn": "Usado en", "@usedIn": {}, diff --git a/lib/l10n/fa_IR/app_fa_IR.arb b/lib/l10n/fa_IR/app_fa_IR.arb index 02358b03..ceb836db 100644 --- a/lib/l10n/fa_IR/app_fa_IR.arb +++ b/lib/l10n/fa_IR/app_fa_IR.arb @@ -36,17 +36,17 @@ "@appDetails": {}, "allocated": "اختصاص داده شده", "@allocated": {}, - "aspectRatio16x9": "16:9", + "aspectRatio16x9": "۱۶ به ۹", "@aspectRatio16x9": {}, - "aspectRatio3x2": "3:2", + "aspectRatio3x2": "۳ به ۲", "@aspectRatio3x2": {}, - "aspectRatio4x3": "4:3", + "aspectRatio4x3": "۴ به ۳", "@aspectRatio4x3": {}, - "aspectRatioSquare": "Square (1:1)", + "aspectRatioSquare": "مربعی (۱ به ۱)", "@aspectRatioSquare": {}, "allocateStock": "موجودی اختصاص داده شده", "@allocateStock": {}, - "allocatedStock": "Allocated Stock", + "allocatedStock": "موجودی اختصاص داده شده", "@allocatedStock": {}, "appReleaseNotes": "نمایش یادداشت های انتشار برنامه", "@appReleaseNotes": {}, @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "اسکن بارکد متوقف شد", "@barodeScanPaused": {}, - "barcodeScanPause": "Tap to pause scanning", + "barcodeScanPause": "برای توقف اسکن لمس کنید", "@barcodeScanPause": {}, "barcodeScanAssign": "برای اختصاص بارکد اسکن کنید", "@barcodeScanAssign": {}, @@ -180,9 +180,9 @@ "@companyUpdated": {}, "companies": "شرکت‌ها", "@companies": {}, - "complete": "Complete", + "complete": "تکمیل", "@complete": {}, - "completeOrder": "Complete Order", + "completeOrder": "تکمیل سفارش", "@completeOrder": {}, "completionDate": "تاریخ تکمیل", "@completionDate": {}, @@ -204,9 +204,9 @@ }, "credits": "اعتبارات", "@credits": {}, - "crop": "Crop", + "crop": "برش", "@crop": {}, - "cropImage": "Crop Image", + "cropImage": "برش تصویر", "@cropImage": {}, "customer": "مشتری", "@customer": {}, @@ -228,11 +228,11 @@ "@delete": {}, "deleteFailed": "عملیات حذف ناموفق بوده است", "@deleteFailed": {}, - "deleteImageConfirmation": "Are you sure you want to delete this image?", + "deleteImageConfirmation": "آیا مطمئن هستید که میخواهید این تصویر را حذف کنید؟", "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Delete Image", + "deleteImageTooltip": "حذف تصویر", "@deleteImageTooltip": {}, - "deleteImage": "Delete Image", + "deleteImage": "حذف تصویر", "@deleteImage": {}, "deletePart": "حذف قسمت", "@deletePart": {}, @@ -240,7 +240,7 @@ "@deletePartDetail": {}, "deleteSuccess": "عملیات حذف با موفقیت انجام شد", "@deleteSuccess": {}, - "deliveryDate": "Delivery Date", + "deliveryDate": "تاریخ تحویل", "@deliveryDate": {}, "description": "توضیحات", "@description": {}, @@ -254,9 +254,9 @@ }, "documentation": "مستندات", "@documentation": {}, - "downloadComplete": "Download Complete", + "downloadComplete": "دانلود انجام شد", "@downloadComplete": {}, - "downloadError": "Error downloading image", + "downloadError": "خطای دانلود تصویر", "@downloadError": {}, "downloading": "در حال دانلود فایل", "@downloading": {}, @@ -282,7 +282,7 @@ "@editItem": {}, "editLineItem": "ویرایش ایتم خط", "@editLineItem": {}, - "email": "Email", + "email": "پست الکترونیکی", "@email": {}, "enterPassword": "رمز عبور را وارد کنید", "@enterPassword": {}, @@ -384,9 +384,9 @@ "@homeShowPo": {}, "homeShowPoDescription": "نمایش دکمه سفارش خرید در صفحه خانه", "@homeShowPoDescription": {}, - "homeShowShipments": "Show Shipments", + "homeShowShipments": "نمایش محموله", "@homeShowShipments": {}, - "homeShowShipmentsDescription": "Show pending shipments on the home screen", + "homeShowShipmentsDescription": "نمایش محموله در انتظار ارسال بر روی صفحه اصلی", "@homeShowShipmentsDescription": {}, "homeShowSo": "نمایش سفارش های فروش", "@homeShowSo": {}, @@ -454,9 +454,9 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "ترکیب نام کاربری / رمز عبور نامعتبر", "@invalidUsernamePassword": {}, - "invoice": "Invoice", + "invoice": "صورت‌حساب", "@invoice": {}, - "invoiceNumber": "Invoice Number", + "invoiceNumber": "شماره صورت‌حساب", "@invoiceNumber": {}, "issue": "موضوع", "@issue": {}, @@ -472,9 +472,9 @@ "@itemUpdated": {}, "keywords": "کلمات کلیدی", "@keywords": {}, - "labelDriver": "Label Driver", + "labelDriver": "درایور چاپگر برچسب", "@labelDriver": {}, - "labelSelectDriver": "Select Label Printer Driver", + "labelSelectDriver": "انتخاب درایور چاپگر برچسب", "@labelSelectDriver": {}, "labelPrinting": "چاپ لیبل", "@labelPrinting": {}, @@ -514,7 +514,7 @@ "@locationCreate": {}, "locationCreateDetail": "مکان سهام جدید ایجاد کنید", "@locationCreateDetail": {}, - "locationDefault": "Default Location", + "locationDefault": "مکان پیش‌فرض", "@locationDefault": {}, "locationNotSet": "هیچ مکانی مشخص نشده است", "@locationNotSet": {}, @@ -544,9 +544,9 @@ "@missingData": {}, "name": "نام", "@name": {}, - "no": "No", + "no": "خیر", "@no": {}, - "notApplicable": "N/A", + "notApplicable": "موجود نیست", "@notApplicable": {}, "notConnected": "متصل نیست", "@notConnected": {}, @@ -562,11 +562,11 @@ "@noResponse": {}, "noResults": "بدون نتیجه", "@noResults": {}, - "noImageAvailable": "No image available", + "noImageAvailable": "هیچ تصویری موجود نیست", "@noImageAvailable": {}, - "noPricingAvailable": "No pricing available", + "noPricingAvailable": "هیچ قیمتی موجود نیست", "@noPricingAvailable": {}, - "noPricingDataFound": "No pricing data found for this part", + "noPricingDataFound": "هیچ اطلاعات قیمتی برای این قطعه یافت نشد", "@noPricingDataFound": {}, "noSubcategories": "بدون زیر دسته بندی", "@noSubcategories": {}, @@ -630,9 +630,9 @@ "@partsNone": {}, "partNoResults": "هیچ قطعه ای مطابق با جست و جو یافت نشد", "@partNoResults": {}, - "partPricing": "Part Pricing", + "partPricing": "قیمت‌گذاری قطعات", "@partPricing": {}, - "partPricingSettingDetail": "Display part pricing information", + "partPricingSettingDetail": "نمایش اطلاعات قیمت‌گذاری قطعات", "@pricingSettingDetail": {}, "partSettings": "تنظیمات قطعه", "@partSettings": {}, @@ -660,13 +660,13 @@ "@password": {}, "passwordEmpty": "رمز عبور نمی تواند خالی باشد", "@passwordEmpty": {}, - "pending": "Pending", + "pending": "در حال بررسی", "@pending": {}, "permissionAccountDenied": "حساب شما مجوزهای لازم برای انجام این عمل را ندارد", "@permissionAccountDenied": {}, "permissionRequired": "نیازمند مجوز", "@permissionRequired": {}, - "phone": "Phone", + "phone": "تماس", "@phone": {}, "printLabel": "پرینت برچسب", "@printLabel": {}, @@ -762,7 +762,7 @@ "@reference": {}, "refresh": "تازه سازی", "@refresh": {}, - "rotateClockwise": "Rotate 90° clockwise", + "rotateClockwise": "چرخش °90 درجه در جهت عقربه های ساعت", "@rotateClockwise": {}, "refreshing": "در حال تازه سازی", "@refreshing": {}, @@ -940,33 +940,33 @@ "@serverNotConnected": {}, "serverNotSelected": "سرور انتخاب نشده است", "@serverNotSelected": {}, - "shipment": "Shipment", + "shipment": "محموله", "@shipment": {}, "shipments": "محموله ها", "@shipments": {}, - "shipmentsPending": "Pending Shipments", + "shipmentsPending": "محموله در انتظار ارسال", "@shipmentsPending": {}, "shipmentAdd": "افزودن محموله", "@shipmentAdd": {}, - "shipmentCheck": "Check Shipment", + "shipmentCheck": "بررسی محموله", "@shipmentCheck": {}, - "shipmentCheckDetail": "Mark this shipment as checked", + "shipmentCheckDetail": "این محموله را بررسی شده علامت گذاری کن", "@shipmentCheckDetail": {}, - "shipmentChecked": "Shipment Checked", + "shipmentChecked": "محموله بررسی شده", "@shipmentChecked": {}, - "shipmentDate": "Shipment Date", + "shipmentDate": "تاریخ ارسال", "@shipmentDate": {}, - "shipmentEdit": "Edit Shipment", + "shipmentEdit": "تغییر محموله", "@shipmentEdit": {}, - "shipmentReference": "Shipment Reference", + "shipmentReference": "کد محموله", "@shipmentReference": {}, - "shipmentSend": "Send Shipment", + "shipmentSend": "ارسال محموله", "@shipmentSend": {}, - "shipmentUncheck": "Uncheck Shipment", + "shipmentUncheck": "محموله بررسی نشده", "@shipmentUncheck": {}, - "shipmentUncheckDetail": "Mark this shipment as unchecked", + "shipmentUncheckDetail": "این محموله را بررسی نشده علامت گذاری کن", "@shipmentUncheckDetail": {}, - "shipmentUpdated": "Shipment Updated", + "shipmentUpdated": "محموله به روز رسانی شد", "@shipmentUpdated": {}, "shipped": "ارسال شده", "@shipped": {}, @@ -1112,7 +1112,7 @@ "@tokenMissingFromResponse": {}, "totalPrice": "قیمت کل", "@totalPrice": {}, - "trackingNumber": "Tracking Number", + "trackingNumber": "کد رهگیری", "@trackingNumber": {}, "transfer": "انتقال", "@transfer": { @@ -1148,7 +1148,7 @@ "@uploadFailed": {}, "uploadSuccess": "فایل اپلود شد", "@uploadSuccess": {}, - "uploadImage": "Upload Image", + "uploadImage": "بارگذاری تصویر", "@uploadImage": {}, "usedIn": "استفاده شده در", "@usedIn": {}, @@ -1174,34 +1174,34 @@ "@viewSupplierPart": {}, "website": "وب سایت", "@website": {}, - "yes": "Yes", + "yes": "بله", "@yes": {}, - "price": "Price", + "price": "قیمت", "@price": {}, - "priceRange": "Price Range", + "priceRange": "بازه‌ قیمت", "@priceRange": {}, - "priceOverrideMin": "Minimum Price Override", + "priceOverrideMin": "قیمت دستی مینیمم", "@priceOverrideMin": {}, - "priceOverrideMax": "Maximum Price Override", + "priceOverrideMax": "قیمت دستی ماکزیمم", "@priceOverrideMax": {}, - "salePrice": "Sale Price", + "salePrice": "قیمت حراج", "@salePrice": {}, - "saleHistory": "Sale History", + "saleHistory": "تاریخچه حراج", "@saleHistory": {}, - "supplierPricing": "Supplier Pricing", + "supplierPricing": "قیمت تامین کننده", "@supplierPricing": {}, - "bomCost": "BOM Cost", + "bomCost": "هزینه تمام شده", "@bomCost": {}, - "internalCost": "Internal Cost", + "internalCost": "هزینه داخلی", "@internalCost": {}, - "variantCost": "Variant Cost", + "variantCost": "هزینه متغیر", "@variantCost": {}, - "overallPricing": "Overall Pricing", + "overallPricing": "قیمت نهایی", "@overallPricing": {}, - "pricingOverrides": "Pricing Overrides", + "pricingOverrides": "قیمت دستی", "@pricingOverrides": {}, - "currency": "Currency", + "currency": "واحد پول", "@currency": {}, - "priceBreaks": "Price Breaks", + "priceBreaks": "کاهش قیمت", "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/pl_PL/app_pl_PL.arb b/lib/l10n/pl_PL/app_pl_PL.arb index ac7a6c24..5aa8e5c5 100644 --- a/lib/l10n/pl_PL/app_pl_PL.arb +++ b/lib/l10n/pl_PL/app_pl_PL.arb @@ -1202,6 +1202,6 @@ "@pricingOverrides": {}, "currency": "Waluta", "@currency": {}, - "priceBreaks": "Price Breaks", + "priceBreaks": "Widełki cenowe", "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/ro_RO/app_ro_RO.arb b/lib/l10n/ro_RO/app_ro_RO.arb index 6f07c0dc..adfed52c 100644 --- a/lib/l10n/ro_RO/app_ro_RO.arb +++ b/lib/l10n/ro_RO/app_ro_RO.arb @@ -834,374 +834,374 @@ }, "returned": "Returnat", "@returned": {}, - "salesOrder": "Sales Order", + "salesOrder": "Comenzi de Vânzare", "@salesOrder": {}, - "salesOrders": "Sales Orders", + "salesOrders": "Comenzi de Vânzare", "@salesOrders": {}, - "salesOrderEnable": "Enable Sales Orders", + "salesOrderEnable": "Activează Comenzile de Vânzări", "@salesOrderEnable": {}, - "salesOrderEnableDetail": "Enable sales order functionality", + "salesOrderEnableDetail": "Activați funcționalitatea comenzilor de vânzare", "@salesOrderEnableDetail": {}, - "salesOrderShowCamera": "Camera Shortcut", + "salesOrderShowCamera": "Scurtătura Cameră", "@salesOrderShowCamera": {}, - "salesOrderShowCameraDetail": "Enable image upload shortcut on sales order screen", + "salesOrderShowCameraDetail": "Activează scurtătura de încărcare a imaginilor pe ecranul comenzii de vânzare", "@salesOrderShowCameraDetail": {}, - "salesOrderSettings": "Sales order settings", + "salesOrderSettings": "Setările comenzii de vânzare", "@salesOrderSettings": {}, - "salesOrderCreate": "New Sales Order", + "salesOrderCreate": "Comandă de vânzări nouă", "@saleOrderCreate": {}, - "salesOrderEdit": "Edit Sales Order", + "salesOrderEdit": "Editează Comanda de Vânzare", "@salesOrderEdit": {}, - "salesOrderUpdated": "Sales order updated", + "salesOrderUpdated": "Comanda de vanzare actualizată", "@salesOrderUpdated": {}, - "save": "Save", + "save": "Salvaţi", "@save": { "description": "Save" }, - "scanBarcode": "Scan Barcode", + "scanBarcode": "Scanați codul de bare", "@scanBarcode": {}, - "scanSupplierPart": "Scan supplier part barcode", + "scanSupplierPart": "Scanare cod de bare furnizor", "@scanSupplierPart": {}, - "scanIntoLocation": "Scan Into Location", + "scanIntoLocation": "Scanare în locație", "@scanIntoLocation": {}, - "scanIntoLocationDetail": "Scan this item into location", + "scanIntoLocationDetail": "Scanează acest articol în locație", "@scanIntoLocationDetail": {}, - "scannerExternal": "External Scanner", + "scannerExternal": "Scanner extern", "@scannerExternal": {}, - "scannerExternalDetail": "Use external scanner to read barcodes (wedge mode)", + "scannerExternalDetail": "Utilizează scanerul extern pentru a citi codurile de bare (modul wedge)", "@scannerExternalDetail": {}, - "scanReceivedParts": "Scan Received Parts", + "scanReceivedParts": "Scanați capitolele primite", "@scanReceivedParts": {}, - "search": "Search", + "search": "Caută", "@search": { "description": "search" }, - "searching": "Searching", + "searching": "Căutare", "@searching": {}, - "searchLocation": "Search for location", + "searchLocation": "Căutați locația", "@searchLocation": {}, - "searchParts": "Search Parts", + "searchParts": "Caută componente", "@searchParts": {}, - "searchStock": "Search Stock", + "searchStock": "Căutare Stoc", "@searchStock": {}, - "select": "Select", + "select": "Selectează", "@select": {}, - "selectFile": "Select File", + "selectFile": "Selectează fișier", "@selectFile": {}, - "selectImage": "Select Image", + "selectImage": "Selectează imagine", "@selectImage": {}, - "selectLocation": "Select a location", + "selectLocation": "Selectați o locație", "@selectLocation": {}, - "send": "Send", + "send": "Trimite", "@send": {}, - "serialNumber": "Serial Number", + "serialNumber": "Număr de serie", "@serialNumber": {}, - "serialNumbers": "Serial Numbers", + "serialNumbers": "Număr de serie", "@serialNumbers": {}, "server": "Server", "@server": {}, - "serverAddress": "Server Address", + "serverAddress": "Adresă server", "@serverAddress": {}, - "serverApiRequired": "Required API Version", + "serverApiRequired": "Versiunea API necesară", "@serverApiRequired": {}, - "serverApiVersion": "Server API Version", + "serverApiVersion": "Versiune API server", "@serverApiVersion": {}, - "serverAuthenticationError": "Authentication Error", + "serverAuthenticationError": "Eroare autentificare", "@serverAuthenticationError": {}, "serverCertificateError": "Cerficate Error", "@serverCertificateError": {}, - "serverCertificateInvalid": "Server HTTPS certificate is invalid", + "serverCertificateInvalid": "Certificatul HTTPS al serverului nu este valid", "@serverCertificateInvalid": {}, - "serverConnected": "Connected to Server", + "serverConnected": "Conectare la server", "@serverConnected": {}, - "serverConnecting": "Connecting to server", + "serverConnecting": "Se conecteaza la server", "@serverConnecting": {}, - "serverCouldNotConnect": "Could not connect to server", + "serverCouldNotConnect": "Nu s-a putut conecta la server", "@serverCouldNotConnect": {}, - "serverEmpty": "Server cannot be empty", + "serverEmpty": "Serverul nu poate fi gol", "@serverEmpty": {}, - "serverError": "Server Error", + "serverError": "Eroare de server", "@serverError": {}, - "serverDetails": "Server Details", + "serverDetails": "Detalii despre server", "@serverDetails": {}, - "serverMissingData": "Server response missing required fields", + "serverMissingData": "Răspuns server lipsă câmpuri obligatorii", "@serverMissingData": {}, - "serverOld": "Old Server Version", + "serverOld": "Versiunea veche a serverului", "@serverOld": {}, - "serverSettings": "Server Settings", + "serverSettings": "Setări server", "@serverSettings": {}, - "serverStart": "Server must start with http[s]", + "serverStart": "Serverul trebuie să înceapă cu http[s]", "@serverStart": {}, - "settings": "Settings", + "settings": "Setări", "@settings": {}, - "serverInstance": "Server Instance", + "serverInstance": "Instanță server", "@serverInstance": {}, - "serverNotConnected": "Server not connected", + "serverNotConnected": "Serverul nu este conectat", "@serverNotConnected": {}, - "serverNotSelected": "Server not selected", + "serverNotSelected": "Serverul nu este selectat", "@serverNotSelected": {}, - "shipment": "Shipment", + "shipment": "Expediere", "@shipment": {}, - "shipments": "Shipments", + "shipments": "Livrări", "@shipments": {}, - "shipmentsPending": "Pending Shipments", + "shipmentsPending": "Livrări în așteptare", "@shipmentsPending": {}, - "shipmentAdd": "Add Shipment", + "shipmentAdd": "Adaugă livrare", "@shipmentAdd": {}, - "shipmentCheck": "Check Shipment", + "shipmentCheck": "Verifica livrare", "@shipmentCheck": {}, - "shipmentCheckDetail": "Mark this shipment as checked", + "shipmentCheckDetail": "Marchează livrarea ca verificată", "@shipmentCheckDetail": {}, - "shipmentChecked": "Shipment Checked", + "shipmentChecked": "Livrare verificată", "@shipmentChecked": {}, - "shipmentDate": "Shipment Date", + "shipmentDate": "Data livrării", "@shipmentDate": {}, - "shipmentEdit": "Edit Shipment", + "shipmentEdit": "Editare livrare", "@shipmentEdit": {}, - "shipmentReference": "Shipment Reference", + "shipmentReference": "Referință livrare", "@shipmentReference": {}, - "shipmentSend": "Send Shipment", + "shipmentSend": "Livrare Trimisa", "@shipmentSend": {}, - "shipmentUncheck": "Uncheck Shipment", + "shipmentUncheck": "Debifează livrare", "@shipmentUncheck": {}, - "shipmentUncheckDetail": "Mark this shipment as unchecked", + "shipmentUncheckDetail": "Marchează livrarea ca nebifat", "@shipmentUncheckDetail": {}, - "shipmentUpdated": "Shipment Updated", + "shipmentUpdated": "Livrare actualizată", "@shipmentUpdated": {}, - "shipped": "Shipped", + "shipped": "Livrat", "@shipped": {}, "sku": "SKU", "@sku": {}, - "sounds": "Sounds", + "sounds": "Sunete", "@sounds": {}, - "soundOnBarcodeAction": "Play audible tone on barcode action", + "soundOnBarcodeAction": "Redă ton sonor la acțiunea codului de bare", "@soundOnBarcodeAction": {}, - "soundOnServerError": "Play audible tone on server error", + "soundOnServerError": "Redă sunetul sonor la eroarea serverului", "@soundOnServerError": {}, - "startDate": "Start Date", + "startDate": "Data inceput", "@startDate": {}, "status": "Status", "@status": {}, "statusCode": "Status Code", "@statusCode": {}, - "stock": "Stock", + "stock": "Stoc", "@stock": { "description": "stock" }, - "stockDetails": "Current available stock quantity", + "stockDetails": "Stoc disponibil curent", "@stockDetails": {}, - "stockItem": "Stock Item", + "stockItem": "Articol Stoc", "@stockItem": { "description": "stock item title" }, - "stockItems": "Stock Items", + "stockItems": "Articol Stoc", "@stockItems": {}, - "stockItemCreate": "New Stock Item", + "stockItemCreate": "Element nou în stoc", "@stockItemCreate": {}, - "stockItemCreateDetail": "Create new stock item in this location", + "stockItemCreateDetail": "Crează element nou în stoc în această locație", "@stockItemCreateDetail": {}, - "stockItemDelete": "Delete Stock Item", + "stockItemDelete": "Şterge elementul din stoc", "@stockItemDelete": {}, - "stockItemDeleteConfirm": "Are you sure you want to delete this stock item?", + "stockItemDeleteConfirm": "Sunteţi sigur că doriţi să ştergeţi acest articol din stoc?", "@stockItemDeleteConfirm": {}, - "stockItemDeleteFailure": "Could not delete stock item", + "stockItemDeleteFailure": "Nu s-a putut șterge articolul din stoc", "@stockItemDeleteFailure": {}, - "stockItemDeleteSuccess": "Stock item deleted", + "stockItemDeleteSuccess": "Articol șters", "@stockItemDeleteSuccess": {}, - "stockItemHistory": "Stock History", + "stockItemHistory": "Istoric Stoc", "@stockItemHistory": {}, - "stockItemHistoryDetail": "Display historical stock tracking information", + "stockItemHistoryDetail": "Afişează informaţii istorice de urmărire stoc", "@stockItemHistoryDetail": {}, - "stockItemTransferred": "Stock item transferred", + "stockItemTransferred": "Articol stoc transferat", "@stockItemTransferred": {}, - "stockItemUpdated": "Stock item updated", + "stockItemUpdated": "Articol stoc actualizat", "@stockItemUpdated": {}, - "stockItemsNotAvailable": "No stock items available", + "stockItemsNotAvailable": "Nu sunt articole disponibile în stoc", "@stockItemsNotAvailable": {}, - "stockItemNotes": "Stock Item Notes", + "stockItemNotes": "Note element de stoc", "@stockItemNotes": {}, - "stockItemUpdateSuccess": "Stock item updated", + "stockItemUpdateSuccess": "Articol stoc actualizat", "@stockItemUpdateSuccess": {}, - "stockItemUpdateFailure": "Stock item update failed", + "stockItemUpdateFailure": "Actualizarea articolului stoc a eșuat", "@stockItemUpdateFailure": {}, - "stockLocation": "Stock Location", + "stockLocation": "Locația stocului", "@stockLocation": { "description": "stock location" }, - "stockLocations": "Stock Locations", + "stockLocations": "Locația stocului", "@stockLocations": {}, - "stockTopLevel": "Top level stock location", + "stockTopLevel": "Locație stoc nivel superior", "@stockTopLevel": {}, - "strictHttps": "Use Strict HTTPS", + "strictHttps": "Folosește HTTPS Strict", "@strictHttps": {}, - "strictHttpsDetails": "Enforce strict checking of HTTPs certificates", + "strictHttpsDetails": "Impune controlul strict al certificatelor HTTP", "@strictHttpsDetails": {}, - "subcategory": "Subcategory", + "subcategory": "Subcategorie", "@subcategory": {}, - "subcategories": "Subcategories", + "subcategories": "Subcategorii", "@subcategories": {}, - "sublocation": "Sublocation", + "sublocation": "Sublocare", "@sublocation": {}, - "sublocations": "Sublocations", + "sublocations": "Sublocare", "@sublocations": {}, - "sublocationNone": "No Sublocations", + "sublocationNone": "Fără sublocări", "@sublocationNone": {}, - "sublocationNoneDetail": "No sublocations available", + "sublocationNoneDetail": "Nu există sublocații disponibile", "@sublocationNoneDetail": {}, - "submitFeedback": "Submit Feedback", + "submitFeedback": "Trimiteți feedback", "@submitFeedback": {}, - "suppliedParts": "Supplied Parts", + "suppliedParts": "Piese furnizate", "@suppliedParts": {}, - "supplier": "Supplier", + "supplier": "Furnizor", "@supplier": {}, - "supplierPart": "Supplier Part", + "supplierPart": "Piesă Furnizor", "@supplierPart": {}, - "supplierPartEdit": "Edit Supplier Part", + "supplierPartEdit": "Editați articol furnizorului", "@supplierPartEdit": {}, - "supplierPartNumber": "Supplier Part Number", + "supplierPartNumber": "Cod furnizor", "@supplierPartNumber": {}, - "supplierPartUpdated": "Supplier Part Updated", + "supplierPartUpdated": "Cod furnizor actualizat", "@supplierPartUpdated": {}, - "supplierParts": "Supplier Parts", + "supplierParts": "Piese Furnizor", "@supplierParts": {}, - "suppliers": "Suppliers", + "suppliers": "Furnizori", "@suppliers": {}, - "supplierReference": "Supplier Reference", + "supplierReference": "Cod furnizor", "@supplierReference": {}, - "switchCamera": "Switch Camera", + "switchCamera": "Comutați Camera", "@switchCamera": {}, - "takePicture": "Take Picture", + "takePicture": "Faceți o fotografie", "@takePicture": {}, - "targetDate": "Target Date", + "targetDate": "Data țintă", "@targetDate": {}, - "templatePart": "Parent Template Part", + "templatePart": "Capitol șablon părinte", "@templatePart": {}, - "testName": "Test Name", + "testName": "Nume test", "@testName": {}, - "testPassedOrFailed": "Test passed or failed", + "testPassedOrFailed": "Testul a trecut sau a eșuat", "@testPassedOrFailed": {}, - "testsRequired": "Required Tests", + "testsRequired": "Teste necesare", "@testsRequired": {}, - "testResults": "Test Results", + "testResults": "Rezultatele testului", "@testResults": { "description": "" }, - "testResultsDetail": "Display stock item test results", + "testResultsDetail": "Afișează rezultatele testului produsului în stoc", "@testResultsDetail": {}, - "testResultAdd": "Add Test Result", + "testResultAdd": "Adăugare rezultat test", "@testResultAdd": {}, - "testResultNone": "No Test Results", + "testResultNone": "Niciun rezultat de test", "@testResultNone": {}, - "testResultNoneDetail": "No test results available", + "testResultNoneDetail": "Nici un rezultat de test disponibil", "@testResultNoneDetail": {}, - "testResultUploadFail": "Error uploading test result", + "testResultUploadFail": "Eroare încărcare rezultat test", "@testResultUploadFail": {}, - "testResultUploadPass": "Test result uploaded", + "testResultUploadPass": "Rezultat test încărcat", "@testResultUploadPass": {}, "timeout": "Timeout", "@timeout": { "description": "" }, - "toggleTorch": "Toggle Torch", + "toggleTorch": "Comutare lanternă", "@toggleTorch": {}, - "tokenError": "Token Error", + "tokenError": "Eroare token", "@tokenError": {}, - "tokenMissing": "Missing Token", + "tokenMissing": "Token lipsă", "@tokenMissing": {}, - "tokenMissingFromResponse": "Access token missing from response", + "tokenMissingFromResponse": "Token-ul de acces lipsește din răspuns", "@tokenMissingFromResponse": {}, - "totalPrice": "Total Price", + "totalPrice": "Preț total", "@totalPrice": {}, - "trackingNumber": "Tracking Number", + "trackingNumber": "Număr de urmărire", "@trackingNumber": {}, "transfer": "Transfer", "@transfer": { "description": "transfer" }, - "transferStock": "Transfer Stock", + "transferStock": "Transfera stoc", "@transferStock": { "description": "transfer stock" }, - "transferStockDetail": "Transfer item to a different location", + "transferStockDetail": "Transferați articolul într-o locație diferită", "@transferStockDetail": {}, - "transferStockLocation": "Transfer Stock Location", + "transferStockLocation": "Transfer locație stoc", "@transferStockLocation": {}, - "transferStockLocationDetail": "Transfer this stock location into another", + "transferStockLocationDetail": "Transferați această locație a stocului în alta", "@transferStockLocationDetail": {}, - "translate": "Translate", + "translate": "Traduceți", "@translate": {}, - "translateHelp": "Help translate the InvenTree app", + "translateHelp": "Ajută la traducerea aplicației InvenTree", "@translateHelp": {}, - "unavailable": "Unavailable", + "unavailable": "Indisponibil", "@unavailable": {}, - "unavailableDetail": "Item is not available", + "unavailableDetail": "Articolul nu este disponibil", "@unavailableDetail": {}, - "unitPrice": "Unit Price", + "unitPrice": "Preţ Unitar", "@unitPrice": {}, - "units": "Units", + "units": "Unități", "@units": {}, - "unknownResponse": "Unknown Response", + "unknownResponse": "Răspuns necunoscut", "@unknownResponse": {}, - "upload": "Upload", + "upload": "Încărcaţi", "@upload": {}, - "uploadFailed": "File upload failed", + "uploadFailed": "Încărcare fișier eșuată", "@uploadFailed": {}, - "uploadSuccess": "File uploaded", + "uploadSuccess": "Fişier încărcat", "@uploadSuccess": {}, - "uploadImage": "Upload Image", + "uploadImage": "Încărcare imagine", "@uploadImage": {}, - "usedIn": "Used In", + "usedIn": "Folosite în", "@usedIn": {}, - "usedInDetails": "Assemblies which require this part", + "usedInDetails": "Ansambluri care necesită aceast articol", "@usedInDetails": {}, "username": "Nume utilizator", "@username": {}, "usernameEmpty": "Numele de utilizator nu poate fi gol", "@usernameEmpty": {}, - "value": "Value", + "value": "Valoare", "@value": { "description": "value" }, - "valueCannotBeEmpty": "Value cannot be empty", + "valueCannotBeEmpty": "Valoarea nu poate fi goală", "@valueCannotBeEmpty": {}, - "valueRequired": "Value is required", + "valueRequired": "Valoarea este obligatorie", "@valueRequired": {}, - "variants": "Variants", + "variants": "Variante", "@variants": {}, - "version": "Version", + "version": "Verisune", "@version": {}, - "viewSupplierPart": "View Supplier Part", + "viewSupplierPart": "Vezi capitol furnizor", "@viewSupplierPart": {}, "website": "Website", "@website": {}, - "yes": "Yes", + "yes": "Da", "@yes": {}, - "price": "Price", + "price": "Preț", "@price": {}, - "priceRange": "Price Range", + "priceRange": "Interval de preț", "@priceRange": {}, - "priceOverrideMin": "Minimum Price Override", + "priceOverrideMin": "Suprascriere Preț Minim", "@priceOverrideMin": {}, - "priceOverrideMax": "Maximum Price Override", + "priceOverrideMax": "Suprascriere de preț maximă", "@priceOverrideMax": {}, - "salePrice": "Sale Price", + "salePrice": "Preț de vânzare", "@salePrice": {}, - "saleHistory": "Sale History", + "saleHistory": "Istoric vanzari", "@saleHistory": {}, - "supplierPricing": "Supplier Pricing", + "supplierPricing": "Prețurile furnizorului", "@supplierPricing": {}, - "bomCost": "BOM Cost", + "bomCost": "Cost BOM", "@bomCost": {}, - "internalCost": "Internal Cost", + "internalCost": "Cost intern", "@internalCost": {}, - "variantCost": "Variant Cost", + "variantCost": "Cost variantă", "@variantCost": {}, - "overallPricing": "Overall Pricing", + "overallPricing": "Preț general", "@overallPricing": {}, - "pricingOverrides": "Pricing Overrides", + "pricingOverrides": "Suprascrieri preturi", "@pricingOverrides": {}, - "currency": "Currency", + "currency": "Monedă", "@currency": {}, - "priceBreaks": "Price Breaks", + "priceBreaks": "Reduceri de preț", "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/tr_TR/app_tr_TR.arb b/lib/l10n/tr_TR/app_tr_TR.arb index 464d3900..2281a9a3 100644 --- a/lib/l10n/tr_TR/app_tr_TR.arb +++ b/lib/l10n/tr_TR/app_tr_TR.arb @@ -10,7 +10,7 @@ }, "about": "Hakkında", "@about": {}, - "accountDetails": "Hesap Detayları", + "accountDetails": "Hesap Ayrıntıları", "@accountDetails": {}, "actions": "Eylemler", "@actions": { @@ -34,7 +34,7 @@ "@appCredits": {}, "appDetails": "Uygulama Ayrıntıları", "@appDetails": {}, - "allocated": "Tahsis edildi", + "allocated": "Tahsis Edildi", "@allocated": {}, "aspectRatio16x9": "16:9", "@aspectRatio16x9": {}, @@ -44,7 +44,7 @@ "@aspectRatio4x3": {}, "aspectRatioSquare": "Kare (1:1)", "@aspectRatioSquare": {}, - "allocateStock": "Tahsisli stok", + "allocateStock": "Stoku Tahsis Et", "@allocateStock": {}, "allocatedStock": "Tahsis Edilen Stok", "@allocatedStock": {}, @@ -60,7 +60,7 @@ "@assignedToMeDetail": {}, "attachments": "Ekler", "@attachments": {}, - "attachImage": "Resim ekle", + "attachImage": "Görsel Ekle", "@attachImage": { "description": "Attach an image" }, @@ -98,7 +98,7 @@ "@barcodeNotAssigned": {}, "barcodeScanPart": "Parça barkodnu tara", "@barcodeScanPart": {}, - "barcodeReceivePart": "Tesellüm barkodunu tara", + "barcodeReceivePart": "Parçayı teslim almak için barkodu tarayın", "@barcodeReceivePart": {}, "barcodeScanPaused": "Barkod tarama duraklatıldı", "@barodeScanPaused": {}, @@ -138,15 +138,15 @@ "@barcodeUnknown": {}, "batchCode": "Grup kodu", "@batchCode": {}, - "billOfMaterials": "Fatura materyalleri", + "billOfMaterials": "Ürün Ağacı", "@billOfMaterials": {}, "bom": "BOM", "@bom": {}, - "bomEnable": "Malzeme Listesini Görüntüle", + "bomEnable": "Ürün Ağacını Görüntüle", "@bomEnable": {}, - "build": "Yap", + "build": "Üret", "@build": {}, - "building": "Yapılıyor", + "building": "Üretiliyor", "@building": {}, "cameraCreationError": "Kamera Kontrolcüsü Açılamadı", "@cameraCreationError": {}, @@ -176,7 +176,7 @@ "@companyEdit": {}, "companyNoResults": "Sorguyla eşleşen şirket yok", "@companyNoResults": {}, - "companyUpdated": "Firma bilgileri güncellendi", + "companyUpdated": "Şirket bilgileri güncellendi", "@companyUpdated": {}, "companies": "Şirketler", "@companies": {}, @@ -206,7 +206,7 @@ "@credits": {}, "crop": "Kırp", "@crop": {}, - "cropImage": "Resmi Kırp", + "cropImage": "Görseli Kırp", "@cropImage": {}, "customer": "Müşteri", "@customer": {}, @@ -228,11 +228,11 @@ "@delete": {}, "deleteFailed": "Silme işlemi başarısız", "@deleteFailed": {}, - "deleteImageConfirmation": "Bu resmi silmek istediğinizden emin misiniz?", + "deleteImageConfirmation": "Bu görseli silmek istediğinize emin misiniz?", "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Görüntüyü Sil", + "deleteImageTooltip": "Görseli Sil", "@deleteImageTooltip": {}, - "deleteImage": "Resmi sil", + "deleteImage": "Görseli sil", "@deleteImage": {}, "deletePart": "Parça Sil", "@deletePart": {}, @@ -244,11 +244,11 @@ "@deliveryDate": {}, "description": "Açıklama", "@description": {}, - "destination": "Varış Yeri", + "destination": "Hedef", "@destination": {}, "destroyed": "Yok edildi", "@destroyed": {}, - "details": "Detaylar", + "details": "Ayrıntılar", "@details": { "description": "details" }, @@ -280,7 +280,7 @@ }, "editItem": "Stok kalemi düzenle", "@editItem": {}, - "editLineItem": "Satır Ögesini Düzenle", + "editLineItem": "Satırı Düzenle", "@editLineItem": {}, "email": "E-posta", "@email": {}, @@ -316,9 +316,9 @@ "@expiryExpired": {}, "expiryStale": "Eskimiş", "@expiryStale": {}, - "extraLineItem": "Fazladan Satır Ögesi", + "extraLineItem": "Ek Kalem", "@extraLineItem": {}, - "extraLineItems": "Fazladan Satır Ögeleri", + "extraLineItems": "Ek Kalemler", "@extraLineItems": {}, "feedback": "Geri Bildirim", "@feedback": {}, @@ -392,9 +392,9 @@ "@homeShowSo": {}, "homeShowSoDescription": "Satış siparişleri tuşunu giriş ekranında göster", "@homeShowSoDescription": {}, - "homeShowSubscribed": "Parça bildirimlerine abone ol", + "homeShowSubscribed": "Takip Edilen Parçalar", "@homeShowSubscribed": {}, - "homeShowSubscribedDescription": "Abone olunan bölümleri ana ekranda göster", + "homeShowSubscribedDescription": "Takip edilen parçaları ana ekranda göster", "@homeShowSubscsribedDescription": {}, "homeShowSuppliers": "Tedarikçileri Göster", "@homeShowSuppliers": {}, @@ -408,13 +408,13 @@ "@homeShowCustomers": {}, "homeShowCustomersDescription": "Müşteri butonunu ana ekranda göster", "@homeShowCustomersDescription": {}, - "imageUploadFailure": "Fotoğraf yükleme başarısız", + "imageUploadFailure": "Görsel yükleme başarısız", "@imageUploadFailure": {}, - "imageUploadSuccess": "Resim yüklendi", + "imageUploadSuccess": "Görsel yüklendi", "@imageUploadSuccess": {}, "inactive": "Pasif", "@inactive": {}, - "inactiveCompany": "Bu şirket pasif olarak imlendi", + "inactiveCompany": "Bu şirket pasif olarak işaretlendi", "@inactiveCompany": {}, "inactiveDetail": "Bu parça pasif olarak işaretlendi", "@inactiveDetail": {}, @@ -432,7 +432,7 @@ "@internalPartNumber": {}, "info": "Bilgi", "@info": {}, - "inProduction": "Yapım Aşamasında", + "inProduction": "Üretimde", "@inProduction": {}, "inProductionDetail": "Bu stok kalemi üretimdedir", "@inProductionDetail": {}, @@ -462,7 +462,7 @@ "@issue": {}, "issueDate": "Sorun Tarihi", "@issueDate": {}, - "issueOrder": "Sipariş Ver", + "issueOrder": "Sipariş Düzenle", "@issueOrder": {}, "itemInLocation": "Parça zaten konumda", "@itemInLocation": {}, @@ -472,13 +472,13 @@ "@itemUpdated": {}, "keywords": "Anahtar kelimeler", "@keywords": {}, - "labelDriver": "Label Driver", + "labelDriver": "Etiket Sürücü", "@labelDriver": {}, "labelSelectDriver": "Etiket Yazıcı Sürücüsü Seçin", "@labelSelectDriver": {}, "labelPrinting": "Etiket Yazdırma", "@labelPrinting": {}, - "labelPrintingDetail": "Etiket yazdırmayı aktifleştir", + "labelPrintingDetail": "Etiket yazdırmayı etkinleştir", "@labelPrintingDetail": {}, "labelTemplate": "Etiket Şablonu", "@labelTemplate": {}, @@ -496,15 +496,15 @@ "@lastStocktake": {}, "lastUpdated": "Son güncelleme", "@lastUpdated": {}, - "level": "Düzey", + "level": "Seviye", "@level": {}, - "lineItemAdd": "Satır Ögesi Ekle", + "lineItemAdd": "Satır Ekle", "@lineItemAdd": {}, - "lineItem": "Parça Sırası", + "lineItem": "Satır", "@lineItem": {}, - "lineItems": "Parçalar Sırası", + "lineItems": "Satırlar", "@lineItems": {}, - "lineItemUpdated": "Satır ögesi güncellendi", + "lineItemUpdated": "Satır güncellendi", "@lineItemUpdated": {}, "locateItem": "Stok kalemi bul", "@locateItem": {}, @@ -562,7 +562,7 @@ "@noResponse": {}, "noResults": "Sonuç Yok", "@noResults": {}, - "noImageAvailable": "Kullanılabilir resim yok", + "noImageAvailable": "Görsel yok", "@noImageAvailable": {}, "noPricingAvailable": "Fiyatlandırma mevcut değil", "@noPricingAvailable": {}, @@ -588,9 +588,9 @@ "@orientationPortrait": {}, "orientationSystem": "Sistem", "@orientationSystem": {}, - "outstanding": "Beklemede", + "outstanding": "Açık", "@outstanding": {}, - "outstandingOrderDetail": "Bekleyen siparişleri göster", + "outstandingOrderDetail": "Açık siparişleri göster", "@outstandingOrderDetail": {}, "overdue": "Gecikmede", "@overdue": {}, @@ -624,7 +624,7 @@ "@parts": { "description": "Part (multiple)" }, - "partNotSalable": "Parça satılabilir olarak imlenmemiş", + "partNotSalable": "Parça satılabilir olarak işaretli değil", "@partNotSalable": {}, "partsNone": "Parça Yok", "@partsNone": {}, @@ -636,7 +636,7 @@ "@pricingSettingDetail": {}, "partSettings": "Parça Ayarları", "@partSettings": {}, - "partsStarred": "Sürekli Gelen parçalar", + "partsStarred": "Takip Edilen Parçalar", "@partsStarred": {}, "partsStarredNone": "Yıldızlı parça yok", "@partsStarredNone": {}, @@ -648,7 +648,7 @@ "@partCategoryTopLevel": {}, "partCategories": "Parça Kategorileri", "@partCategories": {}, - "partDetails": "Parça detayları", + "partDetails": "Parça Ayrıntıları", "@partDetails": {}, "partNotes": "Parça notları", "@partNotes": {}, @@ -710,7 +710,7 @@ "@projectCode": {}, "purchaseOrderConfirmScan": "Tarama Verisini Onayla", "@purchaseOrderConfirmScan": {}, - "purchaseOrderConfirmScanDetail": "Taranan Ürünlerin Detaylarını Onayla", + "purchaseOrderConfirmScanDetail": "Kalemleri tararken ayrıntıları onayla", "@purchaseOrderConfirmScanDetail": {}, "purchaseOrderEnable": "Satın Alma Siparişlerini Etkinleştir", "@purchaseOrderEnable": {}, @@ -718,7 +718,7 @@ "@purchaseOrderEnableDetail": {}, "purchaseOrderShowCamera": "Kamera Kısayolu", "@purchaseOrderShowCamera": {}, - "purchaseOrderShowCameraDetail": "Satın alma emirleri ekranında fotoğraf yükleme kısayolunu etkinleştir", + "purchaseOrderShowCameraDetail": "Satın alma siparişi ekranında görsel yükleme kısayolunu etkinleştir", "@purchaseOrderShowCameraDetail": {}, "purchaseOrder": "Satınalma Siparişi", "@purchaseOrder": {}, @@ -750,13 +750,13 @@ "@queryEmpty": {}, "queryNoResults": "Sorgu için sonuç yok", "@queryNoResults": {}, - "received": "Alınan", + "received": "Teslim Alındı", "@received": {}, - "receivedFilterDetail": "Alınan ögeleri göster", + "receivedFilterDetail": "Teslim alınan kalemleri göster", "@receivedFilterDetail": {}, - "receiveItem": "Alınan Öğeler", + "receiveItem": "Kalemi Teslim Al", "@receiveItem": {}, - "receivedItem": "Alınan stok kalemleri", + "receivedItem": "Teslim alınan stok kalemleri", "@receivedItem": {}, "reference": "Referans", "@reference": {}, @@ -844,7 +844,7 @@ "@salesOrderEnableDetail": {}, "salesOrderShowCamera": "Kamera Kısayolu", "@salesOrderShowCamera": {}, - "salesOrderShowCameraDetail": "Satış emirleri ekranında fotoğraf yükleme kısayolunu etkinleştir", + "salesOrderShowCameraDetail": "Satış siparişi ekranında görsel yükleme kısayolunu etkinleştir", "@salesOrderShowCameraDetail": {}, "salesOrderSettings": "Satış emirleri ayarları", "@salesOrderSettings": {}, @@ -870,7 +870,7 @@ "@scannerExternal": {}, "scannerExternalDetail": "Barkodları okumak için harici tarayıcı kullan (keyboard wedge modu)", "@scannerExternalDetail": {}, - "scanReceivedParts": "Alınan Parçaları Tara", + "scanReceivedParts": "Teslim Alınan Parçaları Tara", "@scanReceivedParts": {}, "search": "Ara", "@search": { @@ -888,7 +888,7 @@ "@select": {}, "selectFile": "Dosya Seç", "@selectFile": {}, - "selectImage": "Resim Seç", + "selectImage": "Görsel Seç", "@selectImage": {}, "selectLocation": "Bir yer seçin", "@selectLocation": {}, @@ -922,7 +922,7 @@ "@serverEmpty": {}, "serverError": "Sunucu Hatası", "@serverError": {}, - "serverDetails": "Sunucu Detayları", + "serverDetails": "Sunucu Ayrıntıları", "@serverDetails": {}, "serverMissingData": "Sunucu yanıtında gerekli alanlar eksik", "@serverMissingData": {}, @@ -948,11 +948,11 @@ "@shipmentsPending": {}, "shipmentAdd": "Gönderi Ekle", "@shipmentAdd": {}, - "shipmentCheck": "Teslimatı Kontrol Et", + "shipmentCheck": "Sevkiyatı Kontrol Et", "@shipmentCheck": {}, - "shipmentCheckDetail": "Bu teslimatı kontrol edildi olarak işaretle", + "shipmentCheckDetail": "Bu sevkiyatı kontrol edildi olarak işaretle", "@shipmentCheckDetail": {}, - "shipmentChecked": "Teslimat Kontrol Edildi", + "shipmentChecked": "Sevkiyat Kontrol Edildi", "@shipmentChecked": {}, "shipmentDate": "Teslimat Tarihi", "@shipmentDate": {}, @@ -962,7 +962,7 @@ "@shipmentReference": {}, "shipmentSend": "Teslimatı Gönder", "@shipmentSend": {}, - "shipmentUncheck": "Teslimat İşaretini Kaldır", + "shipmentUncheck": "Sevkiyat Kontrolünü Kaldır", "@shipmentUncheck": {}, "shipmentUncheckDetail": "Bu teslimatı kontrol edilmedi olarak işaretle", "@shipmentUncheckDetail": {}, @@ -1148,7 +1148,7 @@ "@uploadFailed": {}, "uploadSuccess": "Dosya yüklendi", "@uploadSuccess": {}, - "uploadImage": "Resim Yükleyin", + "uploadImage": "Görsel Yükle", "@uploadImage": {}, "usedIn": "Burada Kullanıldı", "@usedIn": {}, @@ -1202,6 +1202,6 @@ "@pricingOverrides": {}, "currency": "Para Birimi", "@currency": {}, - "priceBreaks": "Fiyat Aralığı", + "priceBreaks": "Fiyat Kademeleri", "@priceBreaks": {} } \ No newline at end of file diff --git a/lib/l10n/zh_CN/app_zh_CN.arb b/lib/l10n/zh_CN/app_zh_CN.arb index 876f122d..26cdce41 100644 --- a/lib/l10n/zh_CN/app_zh_CN.arb +++ b/lib/l10n/zh_CN/app_zh_CN.arb @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "条形码扫描已暂停", "@barodeScanPaused": {}, - "barcodeScanPause": "点击或按住以暂停扫描", + "barcodeScanPause": "点击以暂停扫描", "@barcodeScanPause": {}, "barcodeScanAssign": "扫描以分配条形码", "@barcodeScanAssign": {}, @@ -514,7 +514,7 @@ "@locationCreate": {}, "locationCreateDetail": "创建新库存地点", "@locationCreateDetail": {}, - "locationDefault": "默认库存地点", + "locationDefault": "默认位置", "@locationDefault": {}, "locationNotSet": "没有指定仓储位置", "@locationNotSet": {}, From 5f623c0594efcb6bc2fd99f3d05dbdde1c719250 Mon Sep 17 00:00:00 2001 From: HendrikRauh <114620133+HendrikRauh@users.noreply.github.com> Date: Fri, 9 Jan 2026 23:13:28 +0100 Subject: [PATCH 38/40] Add .envrc for Nix environment setup --- .envrc | 14 ++++++ .gitignore | 1 + NOTE.md | 40 +++++++++++++++++ flake.lock | 61 +++++++++++++++++++++++++ flake.nix | 128 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 244 insertions(+) create mode 100644 .envrc create mode 100644 NOTE.md create mode 100644 flake.lock create mode 100644 flake.nix diff --git a/.envrc b/.envrc new file mode 100644 index 00000000..0154438f --- /dev/null +++ b/.envrc @@ -0,0 +1,14 @@ +# Check if nix is available +if command -v nix &> /dev/null; then + use flake + + echo "✅ Nix development environment loaded" +else + # Nix is not available - show instructions for non-Nix users + echo "⚠️ Nix not detected. Please ensure the following are installed manually:" + echo " - Java JDK 17" + echo " - Python 3 with invoke package" + echo " - Android SDK" + echo " - FVM (Flutter Version Management)" + echo "💡 To use Nix: Install from https://nixos.org/download.html" +fi diff --git a/.gitignore b/.gitignore index 8effbf9a..3b84f8e6 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ .buildlog/ .history .svn/ +.direnv coverage/* diff --git a/NOTE.md b/NOTE.md new file mode 100644 index 00000000..665c4b3c --- /dev/null +++ b/NOTE.md @@ -0,0 +1,40 @@ +## Codeänderung + +- android/app/build.gradle: compileSdkVersion/targetSdkVersion auf 36 angehoben, + weil mehrere Plugins SDK 36 voraussetzen. + +## Devbuild (out of the box) + +```sh +invoke translate +flutter build apk --debug +``` + +## Releasebuild (benötigt Signatur; interaktiv) + +Signatur erstellen; Passwörter merken!: + +```sh +keytool -genkey -v -keystore ~/inventree-release-key.jks \ + -keyalg RSA -keysize 2048 \ + -alias inventree +``` + +android/key.properties anlegen mit: + +```properties +storePassword=DEIN_STORE_PASSWORD +keyPassword=DEIN_KEY_PASSWORD +keyAlias=inventree +storeFile=/.../inventree-release-key.jks +``` + +```sh +invoke translate +fvm flutter build apk --release --no-tree-shake-icons +``` + +## Pipe + +1. nix installieren (für flake nutzung) (optional aber dann reproduzierbar) +2. flake anwenden diff --git a/flake.lock b/flake.lock new file mode 100644 index 00000000..1805babf --- /dev/null +++ b/flake.lock @@ -0,0 +1,61 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1767892417, + "narHash": "sha256-dhhvQY67aboBk8b0/u0XB6vwHdgbROZT3fJAjyNh5Ww=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3497aa5c9457a9d88d71fa93a4a8368816fbeeba", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 00000000..5038e85e --- /dev/null +++ b/flake.nix @@ -0,0 +1,128 @@ +{ + description = "InvenTree App Development Environment - CTBK"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + flake-utils.url = "github:numtide/flake-utils"; + }; + + outputs = + { + self, + nixpkgs, + flake-utils, + }: + flake-utils.lib.eachDefaultSystem ( + system: + let + pkgs = import nixpkgs { + inherit system; + config = { + allowUnfree = true; + android_sdk.accept_license = true; + }; + }; + + androidSdk = + (pkgs.androidenv.composeAndroidPackages { + platformVersions = [ + "36" + "35" + "34" + ]; + buildToolsVersions = [ + "36.0.0" + "34.0.0" + ]; + includeEmulator = true; + includeNDK = true; + ndkVersions = [ "26.1.10909125" ]; + cmakeVersions = [ + "3.31.6" + "3.22.1" + ]; + }).androidsdk; + + # FVM wrapper for NixOS - maps fvm commands to Nix-managed Flutter + fvm-wrapper = pkgs.writeShellScriptBin "fvm" '' + case "$1" in + use) + # 'fvm use' is a no-op on NixOS since Flutter is version-managed by Nix + echo "✓ Using Flutter from Nix ($(flutter --version | head -n1))" + exit 0 + ;; + flutter) + # 'fvm flutter ...' becomes 'flutter ...' + shift + exec flutter "$@" + ;; + *) + echo "fvm wrapper: command '$1' not implemented (using Nix-managed Flutter)" >&2 + exit 1 + ;; + esac + ''; + in + { + devShells.default = pkgs.mkShell { + buildInputs = + with pkgs; + [ + # Mobile development + flutter + fvm-wrapper + jdk17 + + # Build tools + android-tools + gradle + + # Python & task runner + python3 + python3Packages.invoke + + # System dependencies for Flutter on Linux + git + curl + unzip + which + ] + ++ lib.optionals stdenv.isLinux [ + gtk3 + glib + pcre + libepoxy + libxkbcommon + dbus + at-spi2-core + file + ]; + + shellHook = '' + export ANDROID_HOME="${androidSdk}/libexec/android-sdk" + export ANDROID_SDK_ROOT="$ANDROID_HOME" + export PATH="$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools/bin:$PATH" + export JAVA_HOME="${pkgs.jdk17}" + export GRADLE_OPTS="-Dorg.gradle.project.android.aapt2FromMavenOverride=$ANDROID_HOME/build-tools/34.0.0/aapt2" + + echo "🚀 InvenTree App Development Environment - CTBK" + echo "📦 Tools: Flutter, FVM, JDK17, Android SDK" + echo "📋 Run: invoke android # Build Android app" + ''; + + LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath ( + with pkgs; + [ + gtk3 + glib + pcre + libepoxy + libxkbcommon + dbus + at-spi2-core + ] + ); + }; + } + ); +} From 0546fba37f189ba80a8cc37c05a6e455d415b364 Mon Sep 17 00:00:00 2001 From: HendrikRauh <114620133+HendrikRauh@users.noreply.github.com> Date: Sat, 10 Jan 2026 00:37:58 +0100 Subject: [PATCH 39/40] Update NOTE.md to add troubleshooting section for Flutter Java version issues --- NOTE.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/NOTE.md b/NOTE.md index 665c4b3c..71d3c6e7 100644 --- a/NOTE.md +++ b/NOTE.md @@ -38,3 +38,10 @@ fvm flutter build apk --release --no-tree-shake-icons 1. nix installieren (für flake nutzung) (optional aber dann reproduzierbar) 2. flake anwenden + +## Problems that occurred + +### Flutter Java Version Problem + +- unset flutter jdk-dir (`flutter config --jdk-dir=""`) +- a specified java version in the flutter config leads to a java From 96627adf7b8ca4cdd254b986e9e559ee0e1d7c9a Mon Sep 17 00:00:00 2001 From: HendrikRauh <114620133+HendrikRauh@users.noreply.github.com> Date: Sat, 10 Jan 2026 14:16:05 +0100 Subject: [PATCH 40/40] Update .gitignore and add flake.nix patching script for Flutter version management --- .gitignore | 1 + flake.lock | 19 +++++++++++++- flake.nix | 11 +++++++- update-flutter-nix.sh | 60 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 update-flutter-nix.sh diff --git a/.gitignore b/.gitignore index 3b84f8e6..90020ffc 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ .history .svn/ .direnv +flake.nix.bak coverage/* diff --git a/flake.lock b/flake.lock index 1805babf..bf891922 100644 --- a/flake.lock +++ b/flake.lock @@ -34,10 +34,27 @@ "type": "github" } }, + "nixpkgs-flutter": { + "locked": { + "lastModified": 1751285371, + "narHash": "sha256-/hDU+2AUeFFu5qGHO/UyFMc4UG/x5Cw5uXO36KGTk6c=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "b9c03fbbaf84d85bb28eee530c7e9edc4021ca1b", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "b9c03fbbaf84d85bb28eee530c7e9edc4021ca1b", + "type": "github" + } + }, "root": { "inputs": { "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs", + "nixpkgs-flutter": "nixpkgs-flutter" } }, "systems": { diff --git a/flake.nix b/flake.nix index 5038e85e..f9475faa 100644 --- a/flake.nix +++ b/flake.nix @@ -4,6 +4,7 @@ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; + nixpkgs-flutter.url = "github:NixOS/nixpkgs/b9c03fbbaf84d85bb28eee530c7e9edc4021ca1b"; }; outputs = @@ -11,16 +12,23 @@ self, nixpkgs, flake-utils, + nixpkgs-flutter, }: flake-utils.lib.eachDefaultSystem ( system: let + pkgs = import nixpkgs { inherit system; config = { allowUnfree = true; android_sdk.accept_license = true; }; + overlays = [ + (final: prev: { + flutter-pkg = import (self.inputs.nixpkgs-flutter) { inherit system; }; + }) + ]; }; androidSdk = @@ -69,7 +77,7 @@ with pkgs; [ # Mobile development - flutter + pkgs.flutter-pkg.flutter fvm-wrapper jdk17 @@ -80,6 +88,7 @@ # Python & task runner python3 python3Packages.invoke + jq # System dependencies for Flutter on Linux git diff --git a/update-flutter-nix.sh b/update-flutter-nix.sh new file mode 100644 index 00000000..5aad34d3 --- /dev/null +++ b/update-flutter-nix.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env bash + +set -e + +# 0. Abhängigkeiten prüfen +for cmd in jq curl sed nix; do + command -v $cmd >/dev/null 2>&1 || { echo "Fehler: $cmd nicht installiert!"; exit 1; } +done + +# 1. Version aus .fvmrc extrahieren +if [ ! -f .fvmrc ]; then + echo "Fehler: .fvmrc nicht gefunden!" + exit 1 +fi + +FLUTTER_VERSION=$(jq -r .flutter .fvmrc) +echo "Gesuchte Flutter Version: $FLUTTER_VERSION" + +# 2. Commit-Hash und Version aus Devbox-API holen +API_URL="https://search.devbox.sh/v2/pkg?name=flutter" +RELEASES_JSON=$(curl -s "$API_URL") + +# Alle Versionen extrahieren und sortieren +ALL_VERSIONS=$(echo "$RELEASES_JSON" | jq -r '.releases[].version' | sort -V) + +# Finde die gewünschte oder nächsthöhere Version +FOUND_VERSION=$(echo "$ALL_VERSIONS" | awk -v v="$FLUTTER_VERSION" '$0 >= v { print; exit }') + +if [ -z "$FOUND_VERSION" ]; then + echo "Fehler: Keine passende Flutter-Version gefunden." + exit 1 +fi + +if [ "$FOUND_VERSION" != "$FLUTTER_VERSION" ]; then + echo "Hinweis: Exakte Version nicht gefunden, benutze stattdessen Version $FOUND_VERSION." +fi + +# Commit-Hash für x86_64-linux extrahieren +COMMIT=$(echo "$RELEASES_JSON" | jq -r --arg v "$FOUND_VERSION" '.releases[] | select(.version==$v) | .platforms[] | select(.system=="x86_64-linux") | .commit_hash' | head -n 1) + +if [ -z "$COMMIT" ] || [ "$COMMIT" == "null" ]; then + echo "Fehler: Kein Commit-Hash für Version $FOUND_VERSION und Plattform x86_64-linux gefunden." + exit 1 +fi + +echo "Gefundener Commit: $COMMIT (Version: $FOUND_VERSION)" + + +# 3. Die flake.nix patchen (Backup anlegen) +sed -i.bak "s|nixpkgs-flutter.url = \"github:NixOS/nixpkgs/[a-f0-9]*\";|nixpkgs-flutter.url = \"github:NixOS/nixpkgs/$COMMIT\";|" flake.nix + +# 4. Den Flake-Lock aktualisieren +nix flake update nixpkgs-flutter + +# 5. Optional: direnv reload +if command -v direnv >/dev/null 2>&1; then + direnv reload +fi + +echo "Erfolgreich! Die flake.nix nutzt nun den Commit für Flutter $FLUTTER_VERSION (oder höher)."