diff --git a/.envrc b/.envrc deleted file mode 100644 index 0154438f..00000000 --- a/.envrc +++ /dev/null @@ -1,14 +0,0 @@ -# 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/.github/workflows/android.yaml b/.github/workflows/android.yaml index 31479275..9f30b481 100644 --- a/.github/workflows/android.yaml +++ b/.github/workflows/android.yaml @@ -3,9 +3,6 @@ name: Android on: - pull_request: - branches: - - master push: branches: - master @@ -33,7 +30,7 @@ jobs: with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} - cache: false + cache: true 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 cdd51ed1..724fa570 100644 --- a/.github/workflows/ios.yaml +++ b/.github/workflows/ios.yaml @@ -3,9 +3,6 @@ name: iOS on: - pull_request: - branches: - - master push: branches: - master @@ -36,7 +33,7 @@ jobs: with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} - cache: false + cache: true 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:" @@ -52,7 +49,6 @@ jobs: dart pub global activate fvm fvm install fvm flutter pub get - fvm flutter precache --ios cd ios pod repo update pod install diff --git a/.gitignore b/.gitignore index 90020ffc..8effbf9a 100644 --- a/.gitignore +++ b/.gitignore @@ -8,8 +8,6 @@ .buildlog/ .history .svn/ -.direnv -flake.nix.bak coverage/* diff --git a/NOTE.md b/NOTE.md deleted file mode 100644 index 71d3c6e7..00000000 --- a/NOTE.md +++ /dev/null @@ -1,47 +0,0 @@ -## 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 - -## 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 diff --git a/assets/release_notes.md b/assets/release_notes.md index cbde0048..17fd96d1 100644 --- a/assets/release_notes.md +++ b/assets/release_notes.md @@ -1,8 +1,3 @@ -### x.xx.x - Month Year ---- - -- Fixes bug which launched camera twice when uploading an attachment - ### 0.21.1 - November 2025 --- diff --git a/flake.lock b/flake.lock deleted file mode 100644 index bf891922..00000000 --- a/flake.lock +++ /dev/null @@ -1,78 +0,0 @@ -{ - "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" - } - }, - "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-flutter": "nixpkgs-flutter" - } - }, - "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 deleted file mode 100644 index f9475faa..00000000 --- a/flake.nix +++ /dev/null @@ -1,137 +0,0 @@ -{ - description = "InvenTree App Development Environment - CTBK"; - - inputs = { - nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; - flake-utils.url = "github:numtide/flake-utils"; - nixpkgs-flutter.url = "github:NixOS/nixpkgs/b9c03fbbaf84d85bb28eee530c7e9edc4021ca1b"; - }; - - outputs = - { - 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 = - (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 - pkgs.flutter-pkg.flutter - fvm-wrapper - jdk17 - - # Build tools - android-tools - gradle - - # Python & task runner - python3 - python3Packages.invoke - jq - - # 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 - ] - ); - }; - } - ); -} diff --git a/lib/api.dart b/lib/api.dart index 61a63798..1d24b397 100644 --- a/lib/api.dart +++ b/lib/api.dart @@ -353,10 +353,6 @@ 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/attachment.dart b/lib/inventree/attachment.dart deleted file mode 100644 index 3f1b9130..00000000 --- a/lib/inventree/attachment.dart +++ /dev/null @@ -1,176 +0,0 @@ -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 90ed77c1..a2a3f21d 100644 --- a/lib/inventree/company.dart +++ b/lib/inventree/company.dart @@ -111,6 +111,31 @@ 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 f87b2de5..e08a053e 100644 --- a/lib/inventree/model.dart +++ b/lib/inventree/model.dart @@ -1,4 +1,5 @@ import "dart:async"; +import "dart:io"; import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:flutter/material.dart"; @@ -14,6 +15,7 @@ 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 { @@ -932,3 +934,171 @@ 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/parameter.dart b/lib/inventree/parameter.dart deleted file mode 100644 index 22006d78..00000000 --- a/lib/inventree/parameter.dart +++ /dev/null @@ -1,77 +0,0 @@ -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 033fae99..23e306c1 100644 --- a/lib/inventree/part.dart +++ b/lib/inventree/part.dart @@ -132,6 +132,68 @@ 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 */ @@ -485,3 +547,28 @@ 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 65af3610..59874dc1 100644 --- a/lib/inventree/purchase_order.dart +++ b/lib/inventree/purchase_order.dart @@ -336,3 +336,28 @@ 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 77c3469d..8b661f4a 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 InvenTreeModel { +class InvenTreeSalesOrderAllocation extends InvenTreeAttachment { InvenTreeSalesOrderAllocation() : super(); InvenTreeSalesOrderAllocation.fromJson(Map json) @@ -428,3 +428,48 @@ class InvenTreeSalesOrderAllocation extends InvenTreeModel { } } } + +/* + * 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 4b5bf3b0..1a45e73e 100644 --- a/lib/inventree/stock.dart +++ b/lib/inventree/stock.dart @@ -575,6 +575,31 @@ 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/l10n/cs_CZ/app_cs_CZ.arb b/lib/l10n/cs_CZ/app_cs_CZ.arb index ccd9d949..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": "Kliknutím pozastavíte skenování", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Skenovat pro přiřazení čárového kódu", "@barcodeScanAssign": {}, @@ -472,9 +472,9 @@ "@itemUpdated": {}, "keywords": "Klíčová slova", "@keywords": {}, - "labelDriver": "Ovladač pro popisky", + "labelDriver": "Label Driver", "@labelDriver": {}, - "labelSelectDriver": "Vyberte ovladač pro tiskárnu štítků", + "labelSelectDriver": "Select Label Printer Driver", "@labelSelectDriver": {}, "labelPrinting": "Tisk štítku", "@labelPrinting": {}, diff --git a/lib/l10n/da_DK/app_da_DK.arb b/lib/l10n/da_DK/app_da_DK.arb index c05efb3e..697846b2 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": "Firkantet (1:1)", + "aspectRatioSquare": "Square (1:1)", "@aspectRatioSquare": {}, "allocateStock": "Tildel lager", "@allocateStock": {}, - "allocatedStock": "Allokeret Lager", + "allocatedStock": "Allocated Stock", "@allocatedStock": {}, "appReleaseNotes": "Vis app-udgivelsesnoter", "@appReleaseNotes": {}, @@ -54,9 +54,9 @@ "@appSettings": {}, "appSettingsDetails": "Konfigurer InvenTree app-indstillinger", "@appSettingsDetails": {}, - "assignedToMe": "Tildelt til Mig", + "assignedToMe": "Assigned to Me", "@assignedToMe": {}, - "assignedToMeDetail": "Vis ordrer som er tildelt mig", + "assignedToMeDetail": "Show orders which are assigned to me", "@assignedToMeDetail": {}, "attachments": "Vedhæftede filer", "@attachments": {}, @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Stregkode skanning på pause", "@barodeScanPaused": {}, - "barcodeScanPause": "Tryk for at pause scanning", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Scan for at tildele stregkode", "@barcodeScanAssign": {}, @@ -112,135 +112,135 @@ "@barcodeScanControllerDetail": {}, "barcodeScanDelay": "Forsinkelse Af Stregkode", "@barcodeScanDelay": {}, - "barcodeScanDelayDetail": "Forsinkelse mellem stregkode scanninger", + "barcodeScanDelayDetail": "Delay between barcode scans", "@barcodeScanDelayDetail": {}, - "barcodeScanGeneral": "Scan en InvenTree stregkode", + "barcodeScanGeneral": "Scan an InvenTree barcode", "@barcodeScanGeneral": {}, - "barcodeScanInItems": "Scan lagervare ind på denne lokation", + "barcodeScanInItems": "Scan stock items into this location", "@barcodeScanInItems": {}, - "barcodeScanLocation": "Scan lager lokation", + "barcodeScanLocation": "Scan stock location", "@barcodeScanLocation": {}, - "barcodeScanSingle": "Enkelt Scan Tilstand", + "barcodeScanSingle": "Single Scan Mode", "@barcodeScanSingle": {}, - "barcodeScanSingleDetail": "Sæt stregkodeskanneren på pause efter hver scanning", + "barcodeScanSingleDetail": "Pause barcode scanner after each scan", "@barcodeScanSingleDetail": {}, - "barcodeScanIntoLocationSuccess": "Scannet ind i lokation", + "barcodeScanIntoLocationSuccess": "Scanned into location", "@barcodeScanIntoLocationSuccess": {}, - "barcodeScanIntoLocationFailure": "Element er ikke scannet ind", + "barcodeScanIntoLocationFailure": "Item not scanned in", "@barcodeScanIntoLocationFailure": {}, - "barcodeScanItem": "Scan lagervare", + "barcodeScanItem": "Scan stock item", "@barcodeScanItem": {}, - "barcodeTones": "Stregkodetoner", + "barcodeTones": "Barcode Tones", "@barcodeTones": {}, - "barcodeUnassign": "Frigiv Stregkode", + "barcodeUnassign": "Unassign Barcode", "@barcodeUnassign": {}, - "barcodeUnknown": "Stregkode ikke genkendt", + "barcodeUnknown": "Barcode is not recognized", "@barcodeUnknown": {}, - "batchCode": "Batch kode", + "batchCode": "Batch Code", "@batchCode": {}, - "billOfMaterials": "Stykliste", + "billOfMaterials": "Bill of Materials", "@billOfMaterials": {}, - "bom": "Stykliste", + "bom": "BOM", "@bom": {}, - "bomEnable": "Vis Stykliste", + "bomEnable": "Display Bill of Materials", "@bomEnable": {}, - "build": "Byg", + "build": "Build", "@build": {}, - "building": "Bygger", + "building": "Building", "@building": {}, - "cameraCreationError": "Kunne ikke åbne kameracontrolleren", + "cameraCreationError": "Could not open camera controller", "@cameraCreationError": {}, - "cameraInternal": "Internt Kamera", + "cameraInternal": "Internal Camera", "@cameraInternal": {}, - "cameraInternalDetail": "Brug internt kamera til at læse stregkoder", + "cameraInternalDetail": "Use internal camera to read barcodes", "@cameraInternalDetail": {}, - "cancel": "Annuller", + "cancel": "Cancel", "@cancel": { "description": "Cancel" }, - "cancelOrder": "Annuller ordre", + "cancelOrder": "Cancel Order", "@cancelOrder": {}, - "category": "Kategori", + "category": "Category", "@category": {}, - "categoryCreate": "Ny kategori", + "categoryCreate": "New Category", "@categoryCreate": {}, - "categoryCreateDetail": "Opret ny del kategori", + "categoryCreateDetail": "Create new part category", "@categoryCreateDetail": {}, - "categoryUpdated": "Del kategori opdateret", + "categoryUpdated": "Part category updated", "@categoryUpdated": {}, - "company": "Firma", + "company": "Company", "@company": {}, - "companyAdd": "Tilføj firma", + "companyAdd": "Add Company", "@companyAdd": {}, - "companyEdit": "Rediger virksomhed", + "companyEdit": "Edit Company", "@companyEdit": {}, - "companyNoResults": "Ingen virksomheder, der matcher forespørgsel", + "companyNoResults": "No companies matching query", "@companyNoResults": {}, - "companyUpdated": "Virksomhedsoplysninger opdateret", + "companyUpdated": "Company details updated", "@companyUpdated": {}, - "companies": "Firmaer", + "companies": "Companies", "@companies": {}, - "complete": "Færdiggjort", + "complete": "Complete", "@complete": {}, - "completeOrder": "Fuldfør ordre", + "completeOrder": "Complete Order", "@completeOrder": {}, - "completionDate": "Færdiggørelsesdato", + "completionDate": "Completion Date", "@completionDate": {}, - "configureServer": "Konfigurer serverindstillinger", + "configureServer": "Configure server settings", "@configureServer": {}, - "confirmScan": "Bekræft overførsel", + "confirmScan": "Confirm Transfer", "@confirmScan": {}, - "confirmScanDetail": "Bekræft lageroverførsel detaljer ved scanning stregkoder", + "confirmScanDetail": "Confirm stock transfer details when scanning barcodes", "@confirmScanDetail": {}, - "connectionRefused": "Forbindelse Afvist", + "connectionRefused": "Connection Refused", "@connectionRefused": {}, - "count": "Antal", + "count": "Count", "@count": { "description": "Count" }, - "countStock": "Tæl Lager", + "countStock": "Count Stock", "@countStock": { "description": "Count Stock" }, - "credits": "Anerkendelser", + "credits": "Credits", "@credits": {}, - "crop": "Beskær", + "crop": "Crop", "@crop": {}, - "cropImage": "Beskær billede", + "cropImage": "Crop Image", "@cropImage": {}, - "customer": "Kunde", + "customer": "Customer", "@customer": {}, - "customers": "Kunder", + "customers": "Customers", "@customers": {}, - "customerReference": "Kundens Reference", + "customerReference": "Customer Reference", "@customerReference": {}, - "damaged": "Beskadiget", + "damaged": "Damaged", "@damaged": {}, - "colorScheme": "Farveskema", + "colorScheme": "Color Scheme", "@colorScheme": {}, - "colorSchemeDetail": "Vælg farveskema", + "colorSchemeDetail": "Select color scheme", "@colorSchemeDetail": {}, - "darkMode": "Mørk tilstand", + "darkMode": "Dark Mode", "@darkMode": {}, - "darkModeEnable": "Aktiver mørk tilstand", + "darkModeEnable": "Enable dark mode", "@darkModeEnable": {}, - "delete": "Slet", + "delete": "Delete", "@delete": {}, - "deleteFailed": "Sletning fejlede", + "deleteFailed": "Delete operation failed", "@deleteFailed": {}, - "deleteImageConfirmation": "Er du sikker på at du vil slette dette billede?", + "deleteImageConfirmation": "Are you sure you want to delete this image?", "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Slet billede", + "deleteImageTooltip": "Delete Image", "@deleteImageTooltip": {}, - "deleteImage": "Slet billede", + "deleteImage": "Delete Image", "@deleteImage": {}, - "deletePart": "Slet Del", + "deletePart": "Delete Part", "@deletePart": {}, - "deletePartDetail": "Fjern denne del fra databasen", + "deletePartDetail": "Remove this part from the database", "@deletePartDetail": {}, "deleteSuccess": "Sletning lykkedes", "@deleteSuccess": {}, - "deliveryDate": "Leveringsdato", + "deliveryDate": "Delivery Date", "@deliveryDate": {}, "description": "Beskrivelse", "@description": {}, @@ -254,9 +254,9 @@ }, "documentation": "Dokumentation", "@documentation": {}, - "downloadComplete": "Download fuldført", + "downloadComplete": "Download Complete", "@downloadComplete": {}, - "downloadError": "Fejl ved download af billede", + "downloadError": "Error downloading image", "@downloadError": {}, "downloading": "Overfører fil", "@downloading": {}, @@ -264,7 +264,7 @@ "@edit": { "description": "edit" }, - "editAttachment": "Rediger Vedhæftning", + "editAttachment": "Edit Attachment", "@editAttachment": {}, "editCategory": "Rediger kategori", "@editCategory": {}, @@ -282,91 +282,91 @@ "@editItem": {}, "editLineItem": "Rediger Linjeelement", "@editLineItem": {}, - "email": "E-mail", + "email": "Email", "@email": {}, "enterPassword": "Indtast adgangskode", "@enterPassword": {}, "enterUsername": "Indtast brugernavn", "@enterUsername": {}, - "error": "Fejl", + "error": "Error", "@error": { "description": "Error" }, - "errorCreate": "Fejl under oprettelse af database post", + "errorCreate": "Error creating database entry", "@errorCreate": {}, - "errorDelete": "Fejl ved sletning af databasepost", + "errorDelete": "Error deleting database entry", "@errorDelete": {}, - "errorDetails": "Fejldetaljer", + "errorDetails": "Error Details", "@errorDetails": {}, - "errorFetch": "Fejl ved hentning af data fra server", + "errorFetch": "Error fetching data from server", "@errorFetch": {}, - "errorUserRoles": "Fejl ved forespørgsel af brugerroller fra server", + "errorUserRoles": "Error requesting user roles from server", "@errorUserRoles": {}, - "errorPluginInfo": "Fejl ved forespørgsel af plugin data fra server", + "errorPluginInfo": "Error requesting plugin data from server", "@errorPluginInfo": {}, - "errorReporting": "Fejlrapportering", + "errorReporting": "Error Reporting", "@errorReporting": {}, - "errorReportUpload": "Upload Fejlrapporter", + "errorReportUpload": "Upload Error Reports", "@errorReportUpload": {}, - "errorReportUploadDetails": "Upload anonyme fejlrapporter og nedbrudslogs", + "errorReportUploadDetails": "Upload anonymous error reports and crash logs", "@errorReportUploadDetails": {}, - "expiryDate": "Udløbsdato", + "expiryDate": "Expiry Date", "@expiryDate": {}, - "expiryExpired": "Udløbet", + "expiryExpired": "Expired", "@expiryExpired": {}, - "expiryStale": "Forældet", + "expiryStale": "Stale", "@expiryStale": {}, - "extraLineItem": "Ekstra linjepost", + "extraLineItem": "Extra Line Item", "@extraLineItem": {}, - "extraLineItems": "Ekstra linjeposter", + "extraLineItems": "Extra Line Items", "@extraLineItems": {}, "feedback": "Feedback", "@feedback": {}, - "feedbackError": "Indsendelse af feedback mislykkedes", + "feedbackError": "Error submitting feedback", "@feedbackError": {}, - "feedbackSuccess": "Feedback indsendt", + "feedbackSuccess": "Feedback submitted", "@feedbackSuccess": {}, "filterActive": "Aktiv", "@filterActive": {}, - "filterActiveDetail": "Vis aktive dele", + "filterActiveDetail": "Show active parts", "@filterActiveDetail": {}, - "filterAssembly": "Samlede", + "filterAssembly": "Assembled", "@filterAssembly": {}, - "filterAssemblyDetail": "Vis samledele", + "filterAssemblyDetail": "Show assembled parts", "@filterAssemblyDetail": {}, - "filterComponent": "Komponent", + "filterComponent": "Component", "@filterComponent": {}, - "filterComponentDetail": "Vis komponentdele", + "filterComponentDetail": "Show component parts", "@filterComponentDetail": {}, - "filterExternal": "Ekstern", + "filterExternal": "External", "@filterExternal": {}, - "filterExternalDetail": "Vis lager på eksterne lokationer", + "filterExternalDetail": "Show stock in external locations", "@filterExternalDetail": {}, "filterInStock": "På Lager", "@filterInStock": {}, - "filterInStockDetail": "Vis dele som har lagerbeholdning", + "filterInStockDetail": "Show parts which have stock", "@filterInStockDetail": {}, - "filterSerialized": "Serialiseret", + "filterSerialized": "Serialized", "@filterSerialized": {}, - "filterSerializedDetail": "Vis serialiserede lagervarer", + "filterSerializedDetail": "Show serialized stock items", "@filterSerializedDetail": {}, - "filterTemplate": "Skabelon", + "filterTemplate": "Template", "@filterTemplate": {}, - "filterTemplateDetail": "Vis skabelon dele", + "filterTemplateDetail": "Show template parts", "@filterTemplateDetail": {}, - "filterTrackable": "Sporbar", + "filterTrackable": "Trackable", "@filterTrackable": {}, - "filterTrackableDetail": "Vis sporbare dele", + "filterTrackableDetail": "Show trackable parts", "@filterTrackableDetail": {}, "filterVirtual": "Virtuel", "@filterVirtual": {}, - "filterVirtualDetail": "Vis virtuelle dele", + "filterVirtualDetail": "Show virtual parts", "@filterVirtualDetail": {}, - "filteringOptions": "Filtreringsindstillinger", + "filteringOptions": "Filtering Options", "@filteringOptions": {}, - "formatException": "Format Undtagelse", + "formatException": "Format Exception", "@formatException": {}, - "formatExceptionJson": "Undtagelse fra JSON-dataformat", + "formatExceptionJson": "JSON data format exception", "@formatExceptionJson": {}, "formError": "Formular Fejl", "@formError": {}, @@ -384,51 +384,51 @@ "@homeShowPo": {}, "homeShowPoDescription": "Vis indkøbsordreknap på startskærmen", "@homeShowPoDescription": {}, - "homeShowShipments": "Vis Forsendelser", + "homeShowShipments": "Show Shipments", "@homeShowShipments": {}, - "homeShowShipmentsDescription": "Vis afventende forsendelser på startskærmen", + "homeShowShipmentsDescription": "Show pending shipments on the home screen", "@homeShowShipmentsDescription": {}, - "homeShowSo": "Vis Salgs ordrer", + "homeShowSo": "Show Sales Orders", "@homeShowSo": {}, - "homeShowSoDescription": "Vis salgsknap på startskærmen", + "homeShowSoDescription": "Show sales order button on home screen", "@homeShowSoDescription": {}, - "homeShowSubscribed": "Abonnerede Dele", + "homeShowSubscribed": "Subscribed Parts", "@homeShowSubscribed": {}, - "homeShowSubscribedDescription": "Vis abonnerede dele på startskærmen", + "homeShowSubscribedDescription": "Show subscribed parts on home screen", "@homeShowSubscsribedDescription": {}, "homeShowSuppliers": "Vis Leverandører", "@homeShowSuppliers": {}, - "homeShowSuppliersDescription": "Vis leverandørknap på startskærmen", + "homeShowSuppliersDescription": "Show suppliers button on home screen", "@homeShowSupplierDescription": {}, - "homeShowManufacturers": "Vis Producenter", + "homeShowManufacturers": "Show Manufacturers", "@homeShowManufacturers": {}, - "homeShowManufacturersDescription": "Vis producent-knap på startskærmen", + "homeShowManufacturersDescription": "Show manufacturers button on home screen", "@homeShowManufacturersDescription": {}, - "homeShowCustomers": "Vis Kunder", + "homeShowCustomers": "Show Customers", "@homeShowCustomers": {}, - "homeShowCustomersDescription": "Vis kunde-knap på startskærmen", + "homeShowCustomersDescription": "Show customers button on home screen", "@homeShowCustomersDescription": {}, - "imageUploadFailure": "Upload af billede fejlede", + "imageUploadFailure": "Image upload failed", "@imageUploadFailure": {}, - "imageUploadSuccess": "Billede uploadet", + "imageUploadSuccess": "Image uploaded", "@imageUploadSuccess": {}, "inactive": "Inaktiv", "@inactive": {}, - "inactiveCompany": "Virksomheden er markeret som inaktiv", + "inactiveCompany": "This company is marked as inactive", "@inactiveCompany": {}, - "inactiveDetail": "Denne del er markeret som inaktiv", + "inactiveDetail": "This part is marked as inactive", "@inactiveDetail": {}, - "includeSubcategories": "Inkluder underkategorier", + "includeSubcategories": "Include Subcategories", "@includeSubcategories": {}, - "includeSubcategoriesDetail": "Vis resultater fra underkategorier", + "includeSubcategoriesDetail": "Show results from subcategories", "@includeSubcategoriesDetail": {}, - "includeSublocations": "Inkluder underlokationer", + "includeSublocations": "Include Sublocations", "@includeSublocations": {}, - "includeSublocationsDetail": "Vis resultater fra underkategorier", + "includeSublocationsDetail": "Show results from sublocations", "@includeSublocationsDetail": {}, - "incompleteDetails": "Ukomplette profiloplysninger", + "incompleteDetails": "Incomplete profile details", "@incompleteDetails": {}, - "internalPartNumber": "Internt Delnummer", + "internalPartNumber": "Internal Part Number", "@internalPartNumber": {}, "info": "Info", "@info": {}, @@ -438,9 +438,9 @@ "@inProductionDetail": {}, "internalPart": "Intern Del", "@internalPart": {}, - "invalidHost": "Ugyldigt hostnavn", + "invalidHost": "Invalid hostname", "@invalidHost": {}, - "invalidHostDetails": "Det angivne hostnavn er ikke gyldigt", + "invalidHostDetails": "Provided hostname is not valid", "@invalidHostDetails": {}, "invalidPart": "Ugyldig Del", "@invalidPart": {}, @@ -454,754 +454,754 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Ugyldigt brugernavn/adgangskode-kombination", "@invalidUsernamePassword": {}, - "invoice": "Faktura", + "invoice": "Invoice", "@invoice": {}, - "invoiceNumber": "Fakturanummer", + "invoiceNumber": "Invoice Number", "@invoiceNumber": {}, - "issue": "Problem", + "issue": "Issue", "@issue": {}, - "issueDate": "Udstedelsesdato", + "issueDate": "Issue Date", "@issueDate": {}, - "issueOrder": "Udstede Ordre", + "issueOrder": "Issue Order", "@issueOrder": {}, - "itemInLocation": "Element allerede på placering", + "itemInLocation": "Item already in location", "@itemInLocation": {}, - "itemDeleted": "Element er blevet fjernet", + "itemDeleted": "Item has been removed", "@itemDeleted": {}, - "itemUpdated": "Element opdateret", + "itemUpdated": "Item updated", "@itemUpdated": {}, - "keywords": "Nøgleord", + "keywords": "Keywords", "@keywords": {}, "labelDriver": "Label Driver", "@labelDriver": {}, - "labelSelectDriver": "Vælg Label Printer Driver", + "labelSelectDriver": "Select Label Printer Driver", "@labelSelectDriver": {}, - "labelPrinting": "Label Udskriver", + "labelPrinting": "Label Printing", "@labelPrinting": {}, - "labelPrintingDetail": "Aktiver label udskrivning", + "labelPrintingDetail": "Enable label printing", "@labelPrintingDetail": {}, - "labelTemplate": "Label Skabelon", + "labelTemplate": "Label Template", "@labelTemplate": {}, - "labelSelectTemplate": "Vælg Label Skabelon", + "labelSelectTemplate": "Select Label Template", "@labelSelectTemplate": {}, - "labelSelectPrinter": "Vælg Label Printer", + "labelSelectPrinter": "Select Label Printer", "@labelSelectPrinter": {}, - "language": "Sprog", + "language": "Language", "@language": {}, - "languageDefault": "Standard systemsprog", + "languageDefault": "Default system language", "@languageDefault": {}, - "languageSelect": "Vælg sprog", + "languageSelect": "Select Language", "@languageSelect": {}, - "lastStocktake": "Sidste lageroptagelse", + "lastStocktake": "Last Stocktake", "@lastStocktake": {}, - "lastUpdated": "Senest opdateret", + "lastUpdated": "Last Updated", "@lastUpdated": {}, - "level": "Niveau", + "level": "Level", "@level": {}, - "lineItemAdd": "Tilføj Linjeelement", + "lineItemAdd": "Add Line Item", "@lineItemAdd": {}, - "lineItem": "Linje Element", + "lineItem": "Line Item", "@lineItem": {}, - "lineItems": "Linjeelementer", + "lineItems": "Line Items", "@lineItems": {}, - "lineItemUpdated": "Linje element opdateret", + "lineItemUpdated": "Line item updated", "@lineItemUpdated": {}, - "locateItem": "Find lagervare", + "locateItem": "Locate stock item", "@locateItem": {}, - "locateLocation": "Find lager lokation", + "locateLocation": "Locate stock location", "@locateLocation": {}, - "locationCreate": "Ny lokation", + "locationCreate": "New Location", "@locationCreate": {}, - "locationCreateDetail": "Opret ny lagerlokation", + "locationCreateDetail": "Create new stock location", "@locationCreateDetail": {}, - "locationDefault": "Standard lokation", + "locationDefault": "Default Location", "@locationDefault": {}, - "locationNotSet": "Ingen lokation specificeret", + "locationNotSet": "No location specified", "@locationNotSet": {}, - "locationUpdated": "Lager lokation opdateret", + "locationUpdated": "Stock location updated", "@locationUpdated": {}, - "login": "Log ind", + "login": "Login", "@login": {}, - "loginEnter": "Indtast login detaljer", + "loginEnter": "Enter login details", "@loginEnter": {}, - "loginEnterDetails": "Brugernavn og adgangskode er ikke gemt lokalt", + "loginEnterDetails": "Username and password are not stored locally", "@loginEnterDetails": {}, "link": "Link", "@link": {}, - "lost": "Mistet", + "lost": "Lost", "@lost": {}, - "manufacturerPart": "Producent Del", + "manufacturerPart": "Manufacturer Part", "@manufacturerPart": {}, - "manufacturerPartEdit": "Rediger Producent Del", + "manufacturerPartEdit": "Edit Manufacturer Part", "@manufacturerPartEdit": {}, - "manufacturerPartNumber": "Producent Delnummer", + "manufacturerPartNumber": "Manufacturer Part Number", "@manufacturerPartNumber": {}, - "manufacturer": "Producent", + "manufacturer": "Manufacturer", "@manufacturer": {}, - "manufacturers": "Producenter", + "manufacturers": "Manufacturers", "@manufacturers": {}, - "missingData": "Mangler data", + "missingData": "Missing Data", "@missingData": {}, - "name": "Navn", + "name": "Name", "@name": {}, - "no": "Nej", + "no": "No", "@no": {}, "notApplicable": "N/A", "@notApplicable": {}, - "notConnected": "Ikke Forbundet", + "notConnected": "Not Connected", "@notConnected": {}, - "notes": "Noter", + "notes": "Notes", "@notes": { "description": "Notes" }, - "notifications": "Notifikationer", + "notifications": "Notifications", "@notifications": {}, - "notificationsEmpty": "Ingen ulæste notifikationer", + "notificationsEmpty": "No unread notifications", "@notificationsEmpty": {}, - "noResponse": "Intet svar fra server", + "noResponse": "No Response from Server", "@noResponse": {}, - "noResults": "Ingen Resultater", + "noResults": "No Results", "@noResults": {}, - "noImageAvailable": "Intet billede tilgængeligt", + "noImageAvailable": "No image available", "@noImageAvailable": {}, - "noPricingAvailable": "Ingen priser tilgængelig", + "noPricingAvailable": "No pricing available", "@noPricingAvailable": {}, - "noPricingDataFound": "Ingen prisdata fundet for denne del", + "noPricingDataFound": "No pricing data found for this part", "@noPricingDataFound": {}, - "noSubcategories": "Ingen Underkategorier", + "noSubcategories": "No Subcategories", "@noSubcategories": {}, - "noSubcategoriesAvailable": "Ingen underkategorier tilgængelige", + "noSubcategoriesAvailable": "No subcategories available", "@noSubcategoriesAvailable": {}, - "numberInvalid": "Ugyldigt nummer", + "numberInvalid": "Invalid number", "@numberInvalid": {}, - "onOrder": "På bestilling", + "onOrder": "On Order", "@onOrder": {}, - "onOrderDetails": "Elementer i øjeblikket på ordre", + "onOrderDetails": "Items currently on order", "@onOrderDetails": {}, - "orientation": "Skærm Orientering", + "orientation": "Screen Orientation", "@orientation": {}, - "orientationDetail": "Skærm orientering (kræver genstart)", + "orientationDetail": "Screen orientation (requires restart)", "@orientationDetail": {}, - "orientationLandscape": "Landskab", + "orientationLandscape": "Landscape", "@orientationLandscape": {}, - "orientationPortrait": "Portræt", + "orientationPortrait": "Portrait", "@orientationPortrait": {}, "orientationSystem": "System", "@orientationSystem": {}, - "outstanding": "Udestående", + "outstanding": "Outstanding", "@outstanding": {}, - "outstandingOrderDetail": "Vis udestående ordrer", + "outstandingOrderDetail": "Show outstanding orders", "@outstandingOrderDetail": {}, - "overdue": "Overskredet", + "overdue": "Overdue", "@overdue": {}, - "overdueDetail": "Vis forfaldne ordre", + "overdueDetail": "Show overdue orders", "@overdueDetail": {}, - "packaging": "Emballage", + "packaging": "Packaging", "@packaging": {}, - "packageName": "Pakkenavn", + "packageName": "Package Name", "@packageName": {}, - "parameters": "Parametre", + "parameters": "Parameters", "@parameters": {}, - "parametersSettingDetail": "Vis delparametre", + "parametersSettingDetail": "Display part parameters", "@parametersSettingDetail": {}, - "parent": "Overordnet", + "parent": "Parent", "@parent": {}, - "parentCategory": "Overordnet kategori", + "parentCategory": "Parent Category", "@parentCategory": {}, - "parentLocation": "Overordnet Placering", + "parentLocation": "Parent Location", "@parentLocation": {}, - "part": "Del", + "part": "Part", "@part": { "description": "Part (single)" }, - "partCreate": "Ny Del", + "partCreate": "New Part", "@partCreate": {}, - "partCreateDetail": "Opret ny del i denne kategori", + "partCreateDetail": "Create new part in this category", "@partCreateDetail": {}, - "partEdited": "Del opdateret", + "partEdited": "Part updated", "@partEdited": {}, - "parts": "Dele", + "parts": "Parts", "@parts": { "description": "Part (multiple)" }, - "partNotSalable": "Del ikke markeret som salgbart", + "partNotSalable": "Part not marked as salable", "@partNotSalable": {}, - "partsNone": "Ingen Dele", + "partsNone": "No Parts", "@partsNone": {}, - "partNoResults": "Ingen dele matcher forespørgsel", + "partNoResults": "No parts matching query", "@partNoResults": {}, - "partPricing": "Del Prisfastsættelse", + "partPricing": "Part Pricing", "@partPricing": {}, - "partPricingSettingDetail": "Vis delprisinformation", + "partPricingSettingDetail": "Display part pricing information", "@pricingSettingDetail": {}, - "partSettings": "Del Indstillinger", + "partSettings": "Part Settings", "@partSettings": {}, - "partsStarred": "Abonnerede Dele", + "partsStarred": "Subscribed Parts", "@partsStarred": {}, - "partsStarredNone": "Ingen markerede dele til rådighed", + "partsStarredNone": "No starred parts available", "@partsStarredNone": {}, - "partSuppliers": "Del Leverandører", + "partSuppliers": "Part Suppliers", "@partSuppliers": {}, - "partCategory": "Del Kategori", + "partCategory": "Part Category", "@partCategory": {}, - "partCategoryTopLevel": "Top niveau del kategori", + "partCategoryTopLevel": "Top level part category", "@partCategoryTopLevel": {}, - "partCategories": "Del Kategorier", + "partCategories": "Part Categories", "@partCategories": {}, - "partDetails": "Del Detaljer", + "partDetails": "Part Details", "@partDetails": {}, - "partNotes": "Del Noter", + "partNotes": "Part Notes", "@partNotes": {}, - "partStock": "Del Lagerbeholdning", + "partStock": "Part Stock", "@partStock": { "description": "part stock" }, - "password": "Adgangskode", + "password": "Password", "@password": {}, - "passwordEmpty": "Adgangskode kan ikke være tom", + "passwordEmpty": "Password cannot be empty", "@passwordEmpty": {}, - "pending": "Afventende", + "pending": "Pending", "@pending": {}, - "permissionAccountDenied": "Din konto har ikke de nødvendige tilladelser til at udføre denne handling", + "permissionAccountDenied": "Your account does not have the required permissions to perform this action", "@permissionAccountDenied": {}, - "permissionRequired": "Tilladelse påkrævet", + "permissionRequired": "Permission Required", "@permissionRequired": {}, - "phone": "Telefon", + "phone": "Phone", "@phone": {}, - "printLabel": "Udskriv label", + "printLabel": "Print Label", "@printLabel": {}, "plugin": "Plugin", "@plugin": {}, "pluginPrinter": "Printer", "@pluginPrinter": {}, - "pluginSupport": "Plugin Support Aktiveret", + "pluginSupport": "Plugin Support Enabled", "@pluginSupport": {}, - "pluginSupportDetail": "Serveren understøtter brugerdefinerede plugins", + "pluginSupportDetail": "The server supports custom plugins", "@pluginSupportDetail": {}, - "printLabelFailure": "Label udskrivning mislykkedes", + "printLabelFailure": "Label printing failed", "@printLabelFailure": {}, - "printLabelSuccess": "Label sendt til printer", + "printLabelSuccess": "Label sent to printer", "@printLabelSuccess": {}, - "profile": "Profil", + "profile": "Profile", "@profile": {}, - "profileAdd": "Tilføj Serverprofil", + "profileAdd": "Add Server Profile", "@profileAdd": {}, - "profileConnect": "Opretter forbindelse til server", + "profileConnect": "Connect to Server", "@profileConnect": {}, - "profileEdit": "Rediger serverprofil", + "profileEdit": "Edit Server Profile", "@profileEdit": {}, - "profileDelete": "Slet Server Profil", + "profileDelete": "Delete Server Profile", "@profileDelete": {}, - "profileLogout": "Log Af Profil", + "profileLogout": "Logout Profile", "@profileLogout": {}, - "profileName": "Profilnavn", + "profileName": "Profile Name", "@profileName": {}, - "profileNone": "Ingen profiler til rådighed", + "profileNone": "No profiles available", "@profileNone": {}, - "profileNotSelected": "Ingen Profil Valgt", + "profileNotSelected": "No Profile Selected", "@profileNotSelected": {}, - "profileSelect": "Vælg InvenTree Server", + "profileSelect": "Select InvenTree Server", "@profileSelect": {}, - "profileSelectOrCreate": "Vælg server eller opret ny profil", + "profileSelectOrCreate": "Select server or create a new profile", "@profileSelectOrCreate": {}, - "profileTapToCreate": "Tryk for at oprette eller vælge en profil", + "profileTapToCreate": "Tap to create or select a profile", "@profileTapToCreate": {}, - "projectCode": "Projektkode", + "projectCode": "Project Code", "@projectCode": {}, - "purchaseOrderConfirmScan": "Bekræft Scanningsdata", + "purchaseOrderConfirmScan": "Confirm Scan Data", "@purchaseOrderConfirmScan": {}, - "purchaseOrderConfirmScanDetail": "Bekræft detaljer ved ind scanning af elementer", + "purchaseOrderConfirmScanDetail": "Confirm details when scanning in items", "@purchaseOrderConfirmScanDetail": {}, - "purchaseOrderEnable": "Aktive Indkøbsordrer", + "purchaseOrderEnable": "Enable Purchase Orders", "@purchaseOrderEnable": {}, - "purchaseOrderEnableDetail": "Aktiver salgsordre funktionalitet", + "purchaseOrderEnableDetail": "Enable purchase order functionality", "@purchaseOrderEnableDetail": {}, - "purchaseOrderShowCamera": "Genvej Til Kamera", + "purchaseOrderShowCamera": "Camera Shortcut", "@purchaseOrderShowCamera": {}, - "purchaseOrderShowCameraDetail": "Aktiver genvej til billedupload på købsordre skærmen", + "purchaseOrderShowCameraDetail": "Enable image upload shortcut on purchase order screen", "@purchaseOrderShowCameraDetail": {}, - "purchaseOrder": "Købsordre", + "purchaseOrder": "Purchase Order", "@purchaseOrder": {}, - "purchaseOrderCreate": "Ny købsordre", + "purchaseOrderCreate": "New Purchase Order", "@purchaseOrderCreate": {}, - "purchaseOrderEdit": "Rediger Købsordre", + "purchaseOrderEdit": "Edit Purchase Order", "@purchaseOrderEdit": {}, - "purchaseOrderSettings": "Indstillinger for indkøbsordre", + "purchaseOrderSettings": "Purchase order settings", "@purchaseOrderSettings": {}, - "purchaseOrders": "Indkøbsordrer", + "purchaseOrders": "Purchase Orders", "@purchaseOrders": {}, - "purchaseOrderUpdated": "Købsordre opdateret", + "purchaseOrderUpdated": "Purchase order updated", "@purchaseOrderUpdated": {}, - "purchasePrice": "Købspris", + "purchasePrice": "Purchase Price", "@purchasePrice": {}, - "quantity": "Antal", + "quantity": "Quantity", "@quantity": { "description": "Quantity" }, - "quantityAvailable": "Antal Tilgængelig", + "quantityAvailable": "Quantity Available", "@quantityAvailable": {}, - "quantityEmpty": "Antal er tomt", + "quantityEmpty": "Quantity is empty", "@quantityEmpty": {}, - "quantityInvalid": "Antal er ugyldigt", + "quantityInvalid": "Quantity is invalid", "@quantityInvalid": {}, - "quantityPositive": "Antallet skal være positivt", + "quantityPositive": "Quantity must be positive", "@quantityPositive": {}, - "queryEmpty": "Indtast søgestreng", + "queryEmpty": "Enter search query", "@queryEmpty": {}, - "queryNoResults": "Ingen resultater fundet", + "queryNoResults": "No results for query", "@queryNoResults": {}, - "received": "Modtaget", + "received": "Received", "@received": {}, - "receivedFilterDetail": "Vis modtagne elementer", + "receivedFilterDetail": "Show received items", "@receivedFilterDetail": {}, - "receiveItem": "Modtage Element", + "receiveItem": "Receive Item", "@receiveItem": {}, - "receivedItem": "Modtaget Lagervare", + "receivedItem": "Received Stock Item", "@receivedItem": {}, "reference": "Reference", "@reference": {}, - "refresh": "Genindlæs", + "refresh": "Refresh", "@refresh": {}, - "rotateClockwise": "Roter 90° med uret", + "rotateClockwise": "Rotate 90° clockwise", "@rotateClockwise": {}, - "refreshing": "Genindlæser", + "refreshing": "Refreshing", "@refreshing": {}, - "rejected": "Afvist", + "rejected": "Rejected", "@rejected": {}, "releaseNotes": "Release Notes", "@releaseNotes": {}, - "remove": "Fjern", + "remove": "Remove", "@remove": { "description": "remove" }, - "removeStock": "Fjern Lagervarer", + "removeStock": "Remove Stock", "@removeStock": { "description": "remove stock" }, - "reportBug": "Rapporter fejl", + "reportBug": "Report Bug", "@reportBug": {}, - "reportBugDescription": "Indsend fejlrapport (kræver GitHub konto)", + "reportBugDescription": "Submit bug report (requires GitHub account)", "@reportBugDescription": {}, - "responsible": "Ansvarlig", + "responsible": "Responsible", "@responsible": {}, - "results": "Resultater", + "results": "Results", "@results": {}, - "request": "Anmodning", + "request": "Request", "@request": {}, - "requestFailed": "Anmodning fejlede", + "requestFailed": "Request Failed", "@requestFailed": {}, - "requestSuccessful": "Anmodning succesfuld", + "requestSuccessful": "Request successful", "@requestSuccessful": {}, - "requestingData": "Anmoder Data", + "requestingData": "Requesting Data", "@requestingData": {}, - "required": "Påkrævet", + "required": "Required", "@required": { "description": "This field is required" }, - "response400": "Dårlig anmodning", + "response400": "Bad Request", "@response400": {}, - "response401": "Uautoriseret", + "response401": "Unauthorized", "@response401": {}, - "response403": "Adgang nægtet", + "response403": "Permission Denied", "@response403": {}, - "response404": "Ressource Ikke Fundet", + "response404": "Resource Not Found", "@response404": {}, - "response405": "Metode ikke tilladt", + "response405": "Method Not Allowed", "@response405": {}, - "response429": "For Mange Anmodninger", + "response429": "Too Many Requests", "@response429": {}, - "response500": "Intern serverfejl", + "response500": "Internal Server Error", "@response500": {}, - "response501": "Ikke implementeret", + "response501": "Not Implemented", "@response501": {}, - "response502": "Dårlig Gateway", + "response502": "Bad Gateway", "@response502": {}, - "response503": "Service er utilgængelig", + "response503": "Service Unavailable", "@response503": {}, "response504": "Gateway Timeout", "@response504": {}, - "response505": "HTTP-version understøttes ikke", + "response505": "HTTP Version Not Supported", "@response505": {}, - "responseData": "Svardata", + "responseData": "Response data", "@responseData": {}, - "responseInvalid": "Ugyldig Svar Kode", + "responseInvalid": "Invalid Response Code", "@responseInvalid": {}, - "responseUnknown": "Ukendt Svar", + "responseUnknown": "Unknown Response", "@responseUnknown": {}, - "result": "Resultat", + "result": "Result", "@result": { "description": "" }, - "returned": "Returneret", + "returned": "Returned", "@returned": {}, - "salesOrder": "Salgsordrer", + "salesOrder": "Sales Order", "@salesOrder": {}, - "salesOrders": "Salgsordrer", + "salesOrders": "Sales Orders", "@salesOrders": {}, - "salesOrderEnable": "Aktiver Salgsordrer", + "salesOrderEnable": "Enable Sales Orders", "@salesOrderEnable": {}, - "salesOrderEnableDetail": "Aktiver salgsordre funktionalitet", + "salesOrderEnableDetail": "Enable sales order functionality", "@salesOrderEnableDetail": {}, - "salesOrderShowCamera": "Genvej Til Kamera", + "salesOrderShowCamera": "Camera Shortcut", "@salesOrderShowCamera": {}, - "salesOrderShowCameraDetail": "Aktiver genvej til billedupload til salgsordre på skærmen", + "salesOrderShowCameraDetail": "Enable image upload shortcut on sales order screen", "@salesOrderShowCameraDetail": {}, - "salesOrderSettings": "Indstillinger for salgsordre", + "salesOrderSettings": "Sales order settings", "@salesOrderSettings": {}, - "salesOrderCreate": "Ny salgsordre", + "salesOrderCreate": "New Sales Order", "@saleOrderCreate": {}, - "salesOrderEdit": "Rediger Salgsordre", + "salesOrderEdit": "Edit Sales Order", "@salesOrderEdit": {}, - "salesOrderUpdated": "Salgs ordre opdateret", + "salesOrderUpdated": "Sales order updated", "@salesOrderUpdated": {}, - "save": "Gem", + "save": "Save", "@save": { "description": "Save" }, - "scanBarcode": "Scan stregkode", + "scanBarcode": "Scan Barcode", "@scanBarcode": {}, - "scanSupplierPart": "Scan leverandørdel stregkode", + "scanSupplierPart": "Scan supplier part barcode", "@scanSupplierPart": {}, - "scanIntoLocation": "Scan Til Placering", + "scanIntoLocation": "Scan Into Location", "@scanIntoLocation": {}, - "scanIntoLocationDetail": "Skan dette element til placering", + "scanIntoLocationDetail": "Scan this item into location", "@scanIntoLocationDetail": {}, - "scannerExternal": "Ekstern Scanner", + "scannerExternal": "External Scanner", "@scannerExternal": {}, - "scannerExternalDetail": "Brug ekstern scanner til at læse stregkoder (kiletilstand)", + "scannerExternalDetail": "Use external scanner to read barcodes (wedge mode)", "@scannerExternalDetail": {}, - "scanReceivedParts": "Scan Modtagne Dele", + "scanReceivedParts": "Scan Received Parts", "@scanReceivedParts": {}, - "search": "Søg", + "search": "Search", "@search": { "description": "search" }, - "searching": "Søger", + "searching": "Searching", "@searching": {}, - "searchLocation": "Søg efter lokation", + "searchLocation": "Search for location", "@searchLocation": {}, - "searchParts": "Søg efter dele", + "searchParts": "Search Parts", "@searchParts": {}, - "searchStock": "Søg Lager", + "searchStock": "Search Stock", "@searchStock": {}, - "select": "Vælg", + "select": "Select", "@select": {}, - "selectFile": "Vælg fil", + "selectFile": "Select File", "@selectFile": {}, - "selectImage": "Vælg billede", + "selectImage": "Select Image", "@selectImage": {}, - "selectLocation": "Vælg en placering", + "selectLocation": "Select a location", "@selectLocation": {}, "send": "Send", "@send": {}, - "serialNumber": "Serienummer", + "serialNumber": "Serial Number", "@serialNumber": {}, - "serialNumbers": "Serienummer", + "serialNumbers": "Serial Numbers", "@serialNumbers": {}, "server": "Server", "@server": {}, - "serverAddress": "Serveradresse", + "serverAddress": "Server Address", "@serverAddress": {}, - "serverApiRequired": "Kræver API-version", + "serverApiRequired": "Required API Version", "@serverApiRequired": {}, "serverApiVersion": "Server API Version", "@serverApiVersion": {}, - "serverAuthenticationError": "Autentificeringsfejl", + "serverAuthenticationError": "Authentication Error", "@serverAuthenticationError": {}, - "serverCertificateError": "Certifikatfejl", + "serverCertificateError": "Cerficate Error", "@serverCertificateError": {}, - "serverCertificateInvalid": "Server HTTPS certifikat er ugyldigt", + "serverCertificateInvalid": "Server HTTPS certificate is invalid", "@serverCertificateInvalid": {}, - "serverConnected": "Forbundet til server", + "serverConnected": "Connected to Server", "@serverConnected": {}, - "serverConnecting": "Opretter forbindelse til server", + "serverConnecting": "Connecting to server", "@serverConnecting": {}, - "serverCouldNotConnect": "Kunne ikke forbinde til server", + "serverCouldNotConnect": "Could not connect to server", "@serverCouldNotConnect": {}, - "serverEmpty": "Serveren kan ikke være tom", + "serverEmpty": "Server cannot be empty", "@serverEmpty": {}, - "serverError": "Serverfejl", + "serverError": "Server Error", "@serverError": {}, - "serverDetails": "Server detaljer", + "serverDetails": "Server Details", "@serverDetails": {}, - "serverMissingData": "Server svar mangler obligatoriske felter", + "serverMissingData": "Server response missing required fields", "@serverMissingData": {}, - "serverOld": "Gammel Server Version", + "serverOld": "Old Server Version", "@serverOld": {}, - "serverSettings": "Server indstillinger", + "serverSettings": "Server Settings", "@serverSettings": {}, - "serverStart": "Server skal starte med http[s]", + "serverStart": "Server must start with http[s]", "@serverStart": {}, - "settings": "Indstillinger", + "settings": "Settings", "@settings": {}, - "serverInstance": "Server Instans", + "serverInstance": "Server Instance", "@serverInstance": {}, - "serverNotConnected": "Server ikke forbundet", + "serverNotConnected": "Server not connected", "@serverNotConnected": {}, - "serverNotSelected": "Server ikke valgt", + "serverNotSelected": "Server not selected", "@serverNotSelected": {}, - "shipment": "Forsendelse", + "shipment": "Shipment", "@shipment": {}, - "shipments": "Forsendelser", + "shipments": "Shipments", "@shipments": {}, - "shipmentsPending": "Afventer Forsendelser", + "shipmentsPending": "Pending Shipments", "@shipmentsPending": {}, - "shipmentAdd": "Tilføj Forsendelse", + "shipmentAdd": "Add Shipment", "@shipmentAdd": {}, - "shipmentCheck": "Tjek Forsendelse", + "shipmentCheck": "Check Shipment", "@shipmentCheck": {}, - "shipmentCheckDetail": "Marker denne forsendelse som kontrolleret", + "shipmentCheckDetail": "Mark this shipment as checked", "@shipmentCheckDetail": {}, - "shipmentChecked": "Forsendelse Kontrolleret", + "shipmentChecked": "Shipment Checked", "@shipmentChecked": {}, - "shipmentDate": "Afsendelsesdato", + "shipmentDate": "Shipment Date", "@shipmentDate": {}, - "shipmentEdit": "Rediger Forsendelse", + "shipmentEdit": "Edit Shipment", "@shipmentEdit": {}, - "shipmentReference": "Forsendelse Reference", + "shipmentReference": "Shipment Reference", "@shipmentReference": {}, - "shipmentSend": "Send Forsendelse", + "shipmentSend": "Send Shipment", "@shipmentSend": {}, - "shipmentUncheck": "Afmarkér Forsendelse", + "shipmentUncheck": "Uncheck Shipment", "@shipmentUncheck": {}, - "shipmentUncheckDetail": "Marker denne forsendelse som afmarkeret", + "shipmentUncheckDetail": "Mark this shipment as unchecked", "@shipmentUncheckDetail": {}, - "shipmentUpdated": "Forsendelse Opdateret", + "shipmentUpdated": "Shipment Updated", "@shipmentUpdated": {}, - "shipped": "Afsendt", + "shipped": "Shipped", "@shipped": {}, - "sku": "Lagerbeholdning", + "sku": "SKU", "@sku": {}, - "sounds": "Lyde", + "sounds": "Sounds", "@sounds": {}, - "soundOnBarcodeAction": "Afspil hørbar tone ved stregkodehandling", + "soundOnBarcodeAction": "Play audible tone on barcode action", "@soundOnBarcodeAction": {}, - "soundOnServerError": "Afspil akustisk tone ved serverfejl", + "soundOnServerError": "Play audible tone on server error", "@soundOnServerError": {}, - "startDate": "Startdato", + "startDate": "Start Date", "@startDate": {}, "status": "Status", "@status": {}, - "statusCode": "Status Kode", + "statusCode": "Status Code", "@statusCode": {}, - "stock": "Lager", + "stock": "Stock", "@stock": { "description": "stock" }, - "stockDetails": "Aktuel disponibel lagermængde", + "stockDetails": "Current available stock quantity", "@stockDetails": {}, - "stockItem": "Lagervarer", + "stockItem": "Stock Item", "@stockItem": { "description": "stock item title" }, - "stockItems": "Lagervarer", + "stockItems": "Stock Items", "@stockItems": {}, - "stockItemCreate": "Ny Lagervare", + "stockItemCreate": "New Stock Item", "@stockItemCreate": {}, - "stockItemCreateDetail": "Opret ny lagervare på denne lokation", + "stockItemCreateDetail": "Create new stock item in this location", "@stockItemCreateDetail": {}, - "stockItemDelete": "Slet Lagervare", + "stockItemDelete": "Delete Stock Item", "@stockItemDelete": {}, - "stockItemDeleteConfirm": "Er du sikker på, at du vil slette denne lagervare?", + "stockItemDeleteConfirm": "Are you sure you want to delete this stock item?", "@stockItemDeleteConfirm": {}, - "stockItemDeleteFailure": "Kunne ikke slette lagervare", + "stockItemDeleteFailure": "Could not delete stock item", "@stockItemDeleteFailure": {}, - "stockItemDeleteSuccess": "Lagervare slettet", + "stockItemDeleteSuccess": "Stock item deleted", "@stockItemDeleteSuccess": {}, - "stockItemHistory": "Lager Historik", + "stockItemHistory": "Stock History", "@stockItemHistory": {}, - "stockItemHistoryDetail": "Vis historisk lagersporings information", + "stockItemHistoryDetail": "Display historical stock tracking information", "@stockItemHistoryDetail": {}, - "stockItemTransferred": "Lagervare overført", + "stockItemTransferred": "Stock item transferred", "@stockItemTransferred": {}, - "stockItemUpdated": "Lagervare opdateret", + "stockItemUpdated": "Stock item updated", "@stockItemUpdated": {}, - "stockItemsNotAvailable": "Ingen lagervarer tilgængelige", + "stockItemsNotAvailable": "No stock items available", "@stockItemsNotAvailable": {}, - "stockItemNotes": "Lager Vare Noter", + "stockItemNotes": "Stock Item Notes", "@stockItemNotes": {}, - "stockItemUpdateSuccess": "Lagervare opdateret", + "stockItemUpdateSuccess": "Stock item updated", "@stockItemUpdateSuccess": {}, - "stockItemUpdateFailure": "Lagervare opdatering mislykkedes", + "stockItemUpdateFailure": "Stock item update failed", "@stockItemUpdateFailure": {}, - "stockLocation": "Lagerlokationer", + "stockLocation": "Stock Location", "@stockLocation": { "description": "stock location" }, - "stockLocations": "Lagerlokationer", + "stockLocations": "Stock Locations", "@stockLocations": {}, - "stockTopLevel": "Top niveau lager lokation", + "stockTopLevel": "Top level stock location", "@stockTopLevel": {}, - "strictHttps": "Brug Streng HTTPS", + "strictHttps": "Use Strict HTTPS", "@strictHttps": {}, - "strictHttpsDetails": "Håndhæve streng kontrol af HTTPS-certifikater", + "strictHttpsDetails": "Enforce strict checking of HTTPs certificates", "@strictHttpsDetails": {}, - "subcategory": "Underkategori", + "subcategory": "Subcategory", "@subcategory": {}, - "subcategories": "Underkategorier", + "subcategories": "Subcategories", "@subcategories": {}, - "sublocation": "Under lokation", + "sublocation": "Sublocation", "@sublocation": {}, - "sublocations": "Under lokationer", + "sublocations": "Sublocations", "@sublocations": {}, - "sublocationNone": "Ingen under lokationer", + "sublocationNone": "No Sublocations", "@sublocationNone": {}, - "sublocationNoneDetail": "Ingen under lokationer tilgængelige", + "sublocationNoneDetail": "No sublocations available", "@sublocationNoneDetail": {}, - "submitFeedback": "Indsend feedback", + "submitFeedback": "Submit Feedback", "@submitFeedback": {}, - "suppliedParts": "Leveret Dele", + "suppliedParts": "Supplied Parts", "@suppliedParts": {}, - "supplier": "Leverandør", + "supplier": "Supplier", "@supplier": {}, - "supplierPart": "Leverandør Del", + "supplierPart": "Supplier Part", "@supplierPart": {}, - "supplierPartEdit": "Rediger Leverandør Del", + "supplierPartEdit": "Edit Supplier Part", "@supplierPartEdit": {}, - "supplierPartNumber": "Leverandør Delnummer", + "supplierPartNumber": "Supplier Part Number", "@supplierPartNumber": {}, - "supplierPartUpdated": "Leverandør Del Opdateret", + "supplierPartUpdated": "Supplier Part Updated", "@supplierPartUpdated": {}, - "supplierParts": "Leverandør Dele", + "supplierParts": "Supplier Parts", "@supplierParts": {}, - "suppliers": "Leverandør", + "suppliers": "Suppliers", "@suppliers": {}, - "supplierReference": "Leverandør Reference", + "supplierReference": "Supplier Reference", "@supplierReference": {}, - "switchCamera": "Skift Kamera", + "switchCamera": "Switch Camera", "@switchCamera": {}, - "takePicture": "Tag billede", + "takePicture": "Take Picture", "@takePicture": {}, - "targetDate": "Måldato", + "targetDate": "Target Date", "@targetDate": {}, - "templatePart": "Overordnet Skabelon Del", + "templatePart": "Parent Template Part", "@templatePart": {}, - "testName": "Test navn", + "testName": "Test Name", "@testName": {}, - "testPassedOrFailed": "Test bestået eller fejlet", + "testPassedOrFailed": "Test passed or failed", "@testPassedOrFailed": {}, - "testsRequired": "Påkrævede Test", + "testsRequired": "Required Tests", "@testsRequired": {}, - "testResults": "Testresultater", + "testResults": "Test Results", "@testResults": { "description": "" }, - "testResultsDetail": "Vis testresultater for lagervarer", + "testResultsDetail": "Display stock item test results", "@testResultsDetail": {}, - "testResultAdd": "Tilføj Testresultat", + "testResultAdd": "Add Test Result", "@testResultAdd": {}, - "testResultNone": "Ingen Testresultater", + "testResultNone": "No Test Results", "@testResultNone": {}, - "testResultNoneDetail": "Ingen testresultater tilgængelige", + "testResultNoneDetail": "No test results available", "@testResultNoneDetail": {}, - "testResultUploadFail": "Fejl under upload af testresultat", + "testResultUploadFail": "Error uploading test result", "@testResultUploadFail": {}, - "testResultUploadPass": "Test resultat uploadet", + "testResultUploadPass": "Test result uploaded", "@testResultUploadPass": {}, "timeout": "Timeout", "@timeout": { "description": "" }, - "toggleTorch": "Tænd/sluk lys", + "toggleTorch": "Toggle Torch", "@toggleTorch": {}, - "tokenError": "Token Fejl", + "tokenError": "Token Error", "@tokenError": {}, - "tokenMissing": "Mangler Token", + "tokenMissing": "Missing Token", "@tokenMissing": {}, - "tokenMissingFromResponse": "Adgangstoken mangler fra svar", + "tokenMissingFromResponse": "Access token missing from response", "@tokenMissingFromResponse": {}, - "totalPrice": "Total Pris", + "totalPrice": "Total Price", "@totalPrice": {}, - "trackingNumber": "Sporingsnummer", + "trackingNumber": "Tracking Number", "@trackingNumber": {}, - "transfer": "Overfør", + "transfer": "Transfer", "@transfer": { "description": "transfer" }, - "transferStock": "Overfør Lager", + "transferStock": "Transfer Stock", "@transferStock": { "description": "transfer stock" }, - "transferStockDetail": "Overfør element til en anden lokation", + "transferStockDetail": "Transfer item to a different location", "@transferStockDetail": {}, - "transferStockLocation": "Overføre lager lokation", + "transferStockLocation": "Transfer Stock Location", "@transferStockLocation": {}, - "transferStockLocationDetail": "Overfør denne lager lokation til en anden", + "transferStockLocationDetail": "Transfer this stock location into another", "@transferStockLocationDetail": {}, - "translate": "Oversæt", + "translate": "Translate", "@translate": {}, - "translateHelp": "Hjælp med at oversætte InvenTree appen", + "translateHelp": "Help translate the InvenTree app", "@translateHelp": {}, - "unavailable": "Utilgængelig", + "unavailable": "Unavailable", "@unavailable": {}, - "unavailableDetail": "Elementet er ikke tilgængeligt", + "unavailableDetail": "Item is not available", "@unavailableDetail": {}, - "unitPrice": "Enhedspris", + "unitPrice": "Unit Price", "@unitPrice": {}, - "units": "Enheder", + "units": "Units", "@units": {}, - "unknownResponse": "Ukendt Svar", + "unknownResponse": "Unknown Response", "@unknownResponse": {}, "upload": "Upload", "@upload": {}, - "uploadFailed": "File upload mislykkedes", + "uploadFailed": "File upload failed", "@uploadFailed": {}, - "uploadSuccess": "Fil uploadet", + "uploadSuccess": "File uploaded", "@uploadSuccess": {}, - "uploadImage": "Upload billede", + "uploadImage": "Upload Image", "@uploadImage": {}, - "usedIn": "Brugt I", + "usedIn": "Used In", "@usedIn": {}, - "usedInDetails": "Samlinger som kræver denne del", + "usedInDetails": "Assemblies which require this part", "@usedInDetails": {}, - "username": "Brugernavn", + "username": "Username", "@username": {}, - "usernameEmpty": "Brugernavn kan ikke være tomt", + "usernameEmpty": "Username cannot be empty", "@usernameEmpty": {}, - "value": "Værdi", + "value": "Value", "@value": { "description": "value" }, - "valueCannotBeEmpty": "Værdien kan ikke være tom", + "valueCannotBeEmpty": "Value cannot be empty", "@valueCannotBeEmpty": {}, - "valueRequired": "Værdi er påkrævet", + "valueRequired": "Value is required", "@valueRequired": {}, - "variants": "Varianter", + "variants": "Variants", "@variants": {}, "version": "Version", "@version": {}, - "viewSupplierPart": "Vis Leverandør Del", + "viewSupplierPart": "View Supplier Part", "@viewSupplierPart": {}, - "website": "Hjemmeside", + "website": "Website", "@website": {}, - "yes": "Ja", + "yes": "Yes", "@yes": {}, - "price": "Pris", + "price": "Price", "@price": {}, - "priceRange": "Prisklasse", + "priceRange": "Price Range", "@priceRange": {}, - "priceOverrideMin": "Tilsidesættelse af minimumspris", + "priceOverrideMin": "Minimum Price Override", "@priceOverrideMin": {}, - "priceOverrideMax": "Tilsidesættelse af maksimalpris", + "priceOverrideMax": "Maximum Price Override", "@priceOverrideMax": {}, - "salePrice": "Salgspris", + "salePrice": "Sale Price", "@salePrice": {}, - "saleHistory": "Salgs Historik", + "saleHistory": "Sale History", "@saleHistory": {}, - "supplierPricing": "Leverandør Pris", + "supplierPricing": "Supplier Pricing", "@supplierPricing": {}, - "bomCost": "Stykliste Pris", + "bomCost": "BOM Cost", "@bomCost": {}, - "internalCost": "Intern Omkostning", + "internalCost": "Internal Cost", "@internalCost": {}, - "variantCost": "Variant Pris", + "variantCost": "Variant Cost", "@variantCost": {}, - "overallPricing": "Samlet prisfastsættelse", + "overallPricing": "Overall Pricing", "@overallPricing": {}, - "pricingOverrides": "Tilsidesætter Prisfastsættelse", + "pricingOverrides": "Pricing Overrides", "@pricingOverrides": {}, - "currency": "Valuta", + "currency": "Currency", "@currency": {}, - "priceBreaks": "Prispauser", + "priceBreaks": "Price Breaks", "@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 e0bb95c4..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 um das Scannen zu pausieren", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Scannen um Barcode zuzuweisen", "@barcodeScanAssign": {}, @@ -472,9 +472,9 @@ "@itemUpdated": {}, "keywords": "Schlüsselwörter", "@keywords": {}, - "labelDriver": "Etikettendrucker Treiber", + "labelDriver": "Label Driver", "@labelDriver": {}, - "labelSelectDriver": "Etikettendrucker Treiber auswählen", + "labelSelectDriver": "Select Label Printer Driver", "@labelSelectDriver": {}, "labelPrinting": "Etikettendruck", "@labelPrinting": {}, @@ -944,29 +944,29 @@ "@shipment": {}, "shipments": "Lieferungen", "@shipments": {}, - "shipmentsPending": "Ausstehende Lieferungen", + "shipmentsPending": "Ausstehende Sendungen", "@shipmentsPending": {}, "shipmentAdd": "Lieferung hinzufügen", "@shipmentAdd": {}, - "shipmentCheck": "Lieferung überprüfen", + "shipmentCheck": "Sendung prüfen", "@shipmentCheck": {}, - "shipmentCheckDetail": "Diese Lieferung als geprüft markieren", + "shipmentCheckDetail": "Diese Sendung als geprüft markieren", "@shipmentCheckDetail": {}, - "shipmentChecked": "Lieferung überprüft", + "shipmentChecked": "Sendung geprüft", "@shipmentChecked": {}, "shipmentDate": "Versanddatum", "@shipmentDate": {}, - "shipmentEdit": "Lieferung bearbeiten", + "shipmentEdit": "Sendung bearbeiten", "@shipmentEdit": {}, - "shipmentReference": "Sendungsreferenz", + "shipmentReference": "Shipment Reference", "@shipmentReference": {}, "shipmentSend": "Lieferung versenden", "@shipmentSend": {}, - "shipmentUncheck": "Lieferung ungeprüft markieren", + "shipmentUncheck": "Uncheck Shipment", "@shipmentUncheck": {}, - "shipmentUncheckDetail": "Diese Lieferung als ungeprüft markieren", + "shipmentUncheckDetail": "Mark this shipment as unchecked", "@shipmentUncheckDetail": {}, - "shipmentUpdated": "Lieferung Aktualisiert", + "shipmentUpdated": "Shipment Updated", "@shipmentUpdated": {}, "shipped": "Versandt", "@shipped": {}, @@ -1102,7 +1102,7 @@ "@timeout": { "description": "" }, - "toggleTorch": "Taschenlampe umschalten", + "toggleTorch": "Toggle Torch", "@toggleTorch": {}, "tokenError": "Token-Fehler", "@tokenError": {}, @@ -1182,7 +1182,7 @@ "@priceRange": {}, "priceOverrideMin": "Mindestpreis überschreiben", "@priceOverrideMin": {}, - "priceOverrideMax": "Maximalen Preis ignorieren", + "priceOverrideMax": "Maximum Price Override", "@priceOverrideMax": {}, "salePrice": "Verkaufspreis", "@salePrice": {}, @@ -1198,7 +1198,7 @@ "@variantCost": {}, "overallPricing": "Gesamt Preise", "@overallPricing": {}, - "pricingOverrides": "Preisgestaltung ignorieren", + "pricingOverrides": "Pricing Overrides", "@pricingOverrides": {}, "currency": "Währung", "@currency": {}, diff --git a/lib/l10n/es_MX/app_es_MX.arb b/lib/l10n/es_MX/app_es_MX.arb index 11970823..4f0ec84f 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": "Deseleccionar Envío", + "shipmentUncheck": "Uncheck Shipment", "@shipmentUncheck": {}, "shipmentUncheckDetail": "Mark this shipment as unchecked", "@shipmentUncheckDetail": {}, @@ -1068,7 +1068,7 @@ "@suppliers": {}, "supplierReference": "Referencia del proveedor", "@supplierReference": {}, - "switchCamera": "Cambiar Cámara", + "switchCamera": "Switch Camera", "@switchCamera": {}, "takePicture": "Tomar una foto", "@takePicture": {}, @@ -1148,7 +1148,7 @@ "@uploadFailed": {}, "uploadSuccess": "Archivo subido", "@uploadSuccess": {}, - "uploadImage": "Subir Imagen", + "uploadImage": "Upload Image", "@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 ceb836db..02358b03 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": "۱۶ به ۹", + "aspectRatio16x9": "16:9", "@aspectRatio16x9": {}, - "aspectRatio3x2": "۳ به ۲", + "aspectRatio3x2": "3:2", "@aspectRatio3x2": {}, - "aspectRatio4x3": "۴ به ۳", + "aspectRatio4x3": "4:3", "@aspectRatio4x3": {}, - "aspectRatioSquare": "مربعی (۱ به ۱)", + "aspectRatioSquare": "Square (1:1)", "@aspectRatioSquare": {}, "allocateStock": "موجودی اختصاص داده شده", "@allocateStock": {}, - "allocatedStock": "موجودی اختصاص داده شده", + "allocatedStock": "Allocated Stock", "@allocatedStock": {}, "appReleaseNotes": "نمایش یادداشت های انتشار برنامه", "@appReleaseNotes": {}, @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "اسکن بارکد متوقف شد", "@barodeScanPaused": {}, - "barcodeScanPause": "برای توقف اسکن لمس کنید", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "برای اختصاص بارکد اسکن کنید", "@barcodeScanAssign": {}, @@ -180,9 +180,9 @@ "@companyUpdated": {}, "companies": "شرکت‌ها", "@companies": {}, - "complete": "تکمیل", + "complete": "Complete", "@complete": {}, - "completeOrder": "تکمیل سفارش", + "completeOrder": "Complete Order", "@completeOrder": {}, "completionDate": "تاریخ تکمیل", "@completionDate": {}, @@ -204,9 +204,9 @@ }, "credits": "اعتبارات", "@credits": {}, - "crop": "برش", + "crop": "Crop", "@crop": {}, - "cropImage": "برش تصویر", + "cropImage": "Crop Image", "@cropImage": {}, "customer": "مشتری", "@customer": {}, @@ -228,11 +228,11 @@ "@delete": {}, "deleteFailed": "عملیات حذف ناموفق بوده است", "@deleteFailed": {}, - "deleteImageConfirmation": "آیا مطمئن هستید که میخواهید این تصویر را حذف کنید؟", + "deleteImageConfirmation": "Are you sure you want to delete this image?", "@deleteImageConfirmation": {}, - "deleteImageTooltip": "حذف تصویر", + "deleteImageTooltip": "Delete Image", "@deleteImageTooltip": {}, - "deleteImage": "حذف تصویر", + "deleteImage": "Delete Image", "@deleteImage": {}, "deletePart": "حذف قسمت", "@deletePart": {}, @@ -240,7 +240,7 @@ "@deletePartDetail": {}, "deleteSuccess": "عملیات حذف با موفقیت انجام شد", "@deleteSuccess": {}, - "deliveryDate": "تاریخ تحویل", + "deliveryDate": "Delivery Date", "@deliveryDate": {}, "description": "توضیحات", "@description": {}, @@ -254,9 +254,9 @@ }, "documentation": "مستندات", "@documentation": {}, - "downloadComplete": "دانلود انجام شد", + "downloadComplete": "Download Complete", "@downloadComplete": {}, - "downloadError": "خطای دانلود تصویر", + "downloadError": "Error downloading image", "@downloadError": {}, "downloading": "در حال دانلود فایل", "@downloading": {}, @@ -282,7 +282,7 @@ "@editItem": {}, "editLineItem": "ویرایش ایتم خط", "@editLineItem": {}, - "email": "پست الکترونیکی", + "email": "Email", "@email": {}, "enterPassword": "رمز عبور را وارد کنید", "@enterPassword": {}, @@ -384,9 +384,9 @@ "@homeShowPo": {}, "homeShowPoDescription": "نمایش دکمه سفارش خرید در صفحه خانه", "@homeShowPoDescription": {}, - "homeShowShipments": "نمایش محموله", + "homeShowShipments": "Show Shipments", "@homeShowShipments": {}, - "homeShowShipmentsDescription": "نمایش محموله در انتظار ارسال بر روی صفحه اصلی", + "homeShowShipmentsDescription": "Show pending shipments on the home screen", "@homeShowShipmentsDescription": {}, "homeShowSo": "نمایش سفارش های فروش", "@homeShowSo": {}, @@ -454,9 +454,9 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "ترکیب نام کاربری / رمز عبور نامعتبر", "@invalidUsernamePassword": {}, - "invoice": "صورت‌حساب", + "invoice": "Invoice", "@invoice": {}, - "invoiceNumber": "شماره صورت‌حساب", + "invoiceNumber": "Invoice Number", "@invoiceNumber": {}, "issue": "موضوع", "@issue": {}, @@ -472,9 +472,9 @@ "@itemUpdated": {}, "keywords": "کلمات کلیدی", "@keywords": {}, - "labelDriver": "درایور چاپگر برچسب", + "labelDriver": "Label Driver", "@labelDriver": {}, - "labelSelectDriver": "انتخاب درایور چاپگر برچسب", + "labelSelectDriver": "Select Label Printer Driver", "@labelSelectDriver": {}, "labelPrinting": "چاپ لیبل", "@labelPrinting": {}, @@ -514,7 +514,7 @@ "@locationCreate": {}, "locationCreateDetail": "مکان سهام جدید ایجاد کنید", "@locationCreateDetail": {}, - "locationDefault": "مکان پیش‌فرض", + "locationDefault": "Default Location", "@locationDefault": {}, "locationNotSet": "هیچ مکانی مشخص نشده است", "@locationNotSet": {}, @@ -544,9 +544,9 @@ "@missingData": {}, "name": "نام", "@name": {}, - "no": "خیر", + "no": "No", "@no": {}, - "notApplicable": "موجود نیست", + "notApplicable": "N/A", "@notApplicable": {}, "notConnected": "متصل نیست", "@notConnected": {}, @@ -562,11 +562,11 @@ "@noResponse": {}, "noResults": "بدون نتیجه", "@noResults": {}, - "noImageAvailable": "هیچ تصویری موجود نیست", + "noImageAvailable": "No image available", "@noImageAvailable": {}, - "noPricingAvailable": "هیچ قیمتی موجود نیست", + "noPricingAvailable": "No pricing available", "@noPricingAvailable": {}, - "noPricingDataFound": "هیچ اطلاعات قیمتی برای این قطعه یافت نشد", + "noPricingDataFound": "No pricing data found for this part", "@noPricingDataFound": {}, "noSubcategories": "بدون زیر دسته بندی", "@noSubcategories": {}, @@ -630,9 +630,9 @@ "@partsNone": {}, "partNoResults": "هیچ قطعه ای مطابق با جست و جو یافت نشد", "@partNoResults": {}, - "partPricing": "قیمت‌گذاری قطعات", + "partPricing": "Part Pricing", "@partPricing": {}, - "partPricingSettingDetail": "نمایش اطلاعات قیمت‌گذاری قطعات", + "partPricingSettingDetail": "Display part pricing information", "@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": "چرخش °90 درجه در جهت عقربه های ساعت", + "rotateClockwise": "Rotate 90° clockwise", "@rotateClockwise": {}, "refreshing": "در حال تازه سازی", "@refreshing": {}, @@ -940,33 +940,33 @@ "@serverNotConnected": {}, "serverNotSelected": "سرور انتخاب نشده است", "@serverNotSelected": {}, - "shipment": "محموله", + "shipment": "Shipment", "@shipment": {}, "shipments": "محموله ها", "@shipments": {}, - "shipmentsPending": "محموله در انتظار ارسال", + "shipmentsPending": "Pending Shipments", "@shipmentsPending": {}, "shipmentAdd": "افزودن محموله", "@shipmentAdd": {}, - "shipmentCheck": "بررسی محموله", + "shipmentCheck": "Check Shipment", "@shipmentCheck": {}, - "shipmentCheckDetail": "این محموله را بررسی شده علامت گذاری کن", + "shipmentCheckDetail": "Mark this shipment as checked", "@shipmentCheckDetail": {}, - "shipmentChecked": "محموله بررسی شده", + "shipmentChecked": "Shipment Checked", "@shipmentChecked": {}, - "shipmentDate": "تاریخ ارسال", + "shipmentDate": "Shipment Date", "@shipmentDate": {}, - "shipmentEdit": "تغییر محموله", + "shipmentEdit": "Edit Shipment", "@shipmentEdit": {}, - "shipmentReference": "کد محموله", + "shipmentReference": "Shipment Reference", "@shipmentReference": {}, - "shipmentSend": "ارسال محموله", + "shipmentSend": "Send Shipment", "@shipmentSend": {}, - "shipmentUncheck": "محموله بررسی نشده", + "shipmentUncheck": "Uncheck Shipment", "@shipmentUncheck": {}, - "shipmentUncheckDetail": "این محموله را بررسی نشده علامت گذاری کن", + "shipmentUncheckDetail": "Mark this shipment as unchecked", "@shipmentUncheckDetail": {}, - "shipmentUpdated": "محموله به روز رسانی شد", + "shipmentUpdated": "Shipment Updated", "@shipmentUpdated": {}, "shipped": "ارسال شده", "@shipped": {}, @@ -1112,7 +1112,7 @@ "@tokenMissingFromResponse": {}, "totalPrice": "قیمت کل", "@totalPrice": {}, - "trackingNumber": "کد رهگیری", + "trackingNumber": "Tracking Number", "@trackingNumber": {}, "transfer": "انتقال", "@transfer": { @@ -1148,7 +1148,7 @@ "@uploadFailed": {}, "uploadSuccess": "فایل اپلود شد", "@uploadSuccess": {}, - "uploadImage": "بارگذاری تصویر", + "uploadImage": "Upload Image", "@uploadImage": {}, "usedIn": "استفاده شده در", "@usedIn": {}, @@ -1174,34 +1174,34 @@ "@viewSupplierPart": {}, "website": "وب سایت", "@website": {}, - "yes": "بله", + "yes": "Yes", "@yes": {}, - "price": "قیمت", + "price": "Price", "@price": {}, - "priceRange": "بازه‌ قیمت", + "priceRange": "Price Range", "@priceRange": {}, - "priceOverrideMin": "قیمت دستی مینیمم", + "priceOverrideMin": "Minimum Price Override", "@priceOverrideMin": {}, - "priceOverrideMax": "قیمت دستی ماکزیمم", + "priceOverrideMax": "Maximum Price Override", "@priceOverrideMax": {}, - "salePrice": "قیمت حراج", + "salePrice": "Sale Price", "@salePrice": {}, - "saleHistory": "تاریخچه حراج", + "saleHistory": "Sale History", "@saleHistory": {}, - "supplierPricing": "قیمت تامین کننده", + "supplierPricing": "Supplier Pricing", "@supplierPricing": {}, - "bomCost": "هزینه تمام شده", + "bomCost": "BOM Cost", "@bomCost": {}, - "internalCost": "هزینه داخلی", + "internalCost": "Internal Cost", "@internalCost": {}, - "variantCost": "هزینه متغیر", + "variantCost": "Variant Cost", "@variantCost": {}, - "overallPricing": "قیمت نهایی", + "overallPricing": "Overall Pricing", "@overallPricing": {}, - "pricingOverrides": "قیمت دستی", + "pricingOverrides": "Pricing Overrides", "@pricingOverrides": {}, - "currency": "واحد پول", + "currency": "Currency", "@currency": {}, - "priceBreaks": "کاهش قیمت", + "priceBreaks": "Price Breaks", "@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 509d9d2a..3286dfae 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": "Lefoglalt Készlet", + "allocatedStock": "Allocated Stock", "@allocatedStock": {}, "appReleaseNotes": "Kiadási közlemények", "@appReleaseNotes": {}, @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Vonalkód olvasás megállítva", "@barodeScanPaused": {}, - "barcodeScanPause": "Érintse meg a szkennelés szüneteltetéséhez", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Kódolvasás a hozzárendeléshez", "@barcodeScanAssign": {}, @@ -240,7 +240,7 @@ "@deletePartDetail": {}, "deleteSuccess": "Törlés sikeres", "@deleteSuccess": {}, - "deliveryDate": "Szállítási Dátum", + "deliveryDate": "Delivery Date", "@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": "Szállítmányok Mutatása", + "homeShowShipments": "Show Shipments", "@homeShowShipments": {}, - "homeShowShipmentsDescription": "Függőben lévő szállítmányok megjelenítése a kezdőképernyőn", + "homeShowShipmentsDescription": "Show pending shipments on the home screen", "@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": "Számla", + "invoice": "Invoice", "@invoice": {}, - "invoiceNumber": "Számlaszám", + "invoiceNumber": "Invoice Number", "@invoiceNumber": {}, "issue": "Kiküldés", "@issue": {}, @@ -472,9 +472,9 @@ "@itemUpdated": {}, "keywords": "Kulcsszavak", "@keywords": {}, - "labelDriver": "Címke Meghajtó", + "labelDriver": "Label Driver", "@labelDriver": {}, - "labelSelectDriver": "Címkenyomtató Meghajtó Kiválasztása", + "labelSelectDriver": "Select Label Printer Driver", "@labelSelectDriver": {}, "labelPrinting": "Címke nyomtatás", "@labelPrinting": {}, @@ -514,7 +514,7 @@ "@locationCreate": {}, "locationCreateDetail": "Új készlet hely létrehozása", "@locationCreateDetail": {}, - "locationDefault": "Alapértelmezett Hely", + "locationDefault": "Default Location", "@locationDefault": {}, "locationNotSet": "Nincs megadva hely", "@locationNotSet": {}, @@ -544,7 +544,7 @@ "@missingData": {}, "name": "Név", "@name": {}, - "no": "Nem", + "no": "No", "@no": {}, "notApplicable": "N/A", "@notApplicable": {}, @@ -660,7 +660,7 @@ "@password": {}, "passwordEmpty": "Jelszó nem lehet üres", "@passwordEmpty": {}, - "pending": "Függőben", + "pending": "Pending", "@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": "Szállítmány", + "shipment": "Shipment", "@shipment": {}, "shipments": "Szállítmányok", "@shipments": {}, - "shipmentsPending": "Függőben Lévő Szállítmányok", + "shipmentsPending": "Pending Shipments", "@shipmentsPending": {}, "shipmentAdd": "Szállítmány hozzáadása", "@shipmentAdd": {}, - "shipmentCheck": "Szállítmány Ellenőrzése", + "shipmentCheck": "Check Shipment", "@shipmentCheck": {}, - "shipmentCheckDetail": "Jelölje meg ezt a szállítmányt ellenőrzöttként", + "shipmentCheckDetail": "Mark this shipment as checked", "@shipmentCheckDetail": {}, - "shipmentChecked": "Szállítmány Ellenőrizve", + "shipmentChecked": "Shipment Checked", "@shipmentChecked": {}, - "shipmentDate": "Szállítmány Dátuma", + "shipmentDate": "Shipment Date", "@shipmentDate": {}, - "shipmentEdit": "Szállítmány Szerkesztése", + "shipmentEdit": "Edit Shipment", "@shipmentEdit": {}, - "shipmentReference": "Szállítmány Hivatkozás", + "shipmentReference": "Shipment Reference", "@shipmentReference": {}, - "shipmentSend": "Szállítmány Küldése", + "shipmentSend": "Send Shipment", "@shipmentSend": {}, - "shipmentUncheck": "Szállítmány Ellenőrzés Visszavonása", + "shipmentUncheck": "Uncheck Shipment", "@shipmentUncheck": {}, - "shipmentUncheckDetail": "Jelölje meg ezt a szállítmányt nem ellenőrzöttként", + "shipmentUncheckDetail": "Mark this shipment as unchecked", "@shipmentUncheckDetail": {}, - "shipmentUpdated": "Szállítmány Frissítve", + "shipmentUpdated": "Shipment Updated", "@shipmentUpdated": {}, "shipped": "Kiszállítva", "@shipped": {}, @@ -1112,7 +1112,7 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Teljes ár", "@totalPrice": {}, - "trackingNumber": "Nyomkövetési Szám", + "trackingNumber": "Tracking Number", "@trackingNumber": {}, "transfer": "Áthelyezés", "@transfer": { @@ -1174,7 +1174,7 @@ "@viewSupplierPart": {}, "website": "Weboldal", "@website": {}, - "yes": "Igen", + "yes": "Yes", "@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 ecbe8b11..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": "Tocca per mettere in pausa la scansione", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Scansiona per assegnare codice a barre", "@barcodeScanAssign": {}, @@ -472,9 +472,9 @@ "@itemUpdated": {}, "keywords": "Parole Chiave", "@keywords": {}, - "labelDriver": "Driver Etichetta", + "labelDriver": "Label Driver", "@labelDriver": {}, - "labelSelectDriver": "Seleziona Il Driver Della Stampante Etichette", + "labelSelectDriver": "Select Label Printer Driver", "@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 ba457583..d8eab7d2 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": "Toegewezen voorraad", + "allocatedStock": "Allocated Stock", "@allocatedStock": {}, "appReleaseNotes": "App release notities weergeven", "@appReleaseNotes": {}, @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Barcode scannen gepauzeerd", "@barodeScanPaused": {}, - "barcodeScanPause": "Klik om scannen te pauzeren", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Scan om streepjescode toe te wijzen", "@barcodeScanAssign": {}, @@ -240,7 +240,7 @@ "@deletePartDetail": {}, "deleteSuccess": "Succesvol verwijderd", "@deleteSuccess": {}, - "deliveryDate": "Leveringsdatum", + "deliveryDate": "Delivery Date", "@deliveryDate": {}, "description": "Omschrijving", "@description": {}, @@ -384,9 +384,9 @@ "@homeShowPo": {}, "homeShowPoDescription": "Inkooporder knop op startscherm weergeven", "@homeShowPoDescription": {}, - "homeShowShipments": "Verzending weergeven", + "homeShowShipments": "Show Shipments", "@homeShowShipments": {}, - "homeShowShipmentsDescription": "Toon Leveringen in afwachting op het startscherm", + "homeShowShipmentsDescription": "Show pending shipments on the home screen", "@homeShowShipmentsDescription": {}, "homeShowSo": "Toon Verkooporders", "@homeShowSo": {}, @@ -454,9 +454,9 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Ongeldige gebruikersnaam / wachtwoord combinatie", "@invalidUsernamePassword": {}, - "invoice": "Factuur", + "invoice": "Invoice", "@invoice": {}, - "invoiceNumber": "Factuur nummer", + "invoiceNumber": "Invoice Number", "@invoiceNumber": {}, "issue": "Probleem", "@issue": {}, @@ -472,9 +472,9 @@ "@itemUpdated": {}, "keywords": "Trefwoorden", "@keywords": {}, - "labelDriver": "Label printer", + "labelDriver": "Label Driver", "@labelDriver": {}, - "labelSelectDriver": "Selecteer Label Printer Driver", + "labelSelectDriver": "Select Label Printer Driver", "@labelSelectDriver": {}, "labelPrinting": "Label afdrukken", "@labelPrinting": {}, @@ -514,7 +514,7 @@ "@locationCreate": {}, "locationCreateDetail": "Creëer nieuwe voorraadlocatie", "@locationCreateDetail": {}, - "locationDefault": "Standaard locatie", + "locationDefault": "Default Location", "@locationDefault": {}, "locationNotSet": "Geen locatie opgegeven", "@locationNotSet": {}, @@ -544,9 +544,9 @@ "@missingData": {}, "name": "Naam", "@name": {}, - "no": "Nee", + "no": "No", "@no": {}, - "notApplicable": "N.v.t. ", + "notApplicable": "N/A", "@notApplicable": {}, "notConnected": "Niet verbonden", "@notConnected": {}, @@ -660,7 +660,7 @@ "@password": {}, "passwordEmpty": "Wachtwoord mag niet leeg zijn", "@passwordEmpty": {}, - "pending": "In behandeling", + "pending": "Pending", "@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": "Levering", + "shipment": "Shipment", "@shipment": {}, "shipments": "Verzendingen", "@shipments": {}, - "shipmentsPending": "Leveringen in behandeling", + "shipmentsPending": "Pending Shipments", "@shipmentsPending": {}, "shipmentAdd": "Verzending toevoegen", "@shipmentAdd": {}, - "shipmentCheck": "Controleer Levering", + "shipmentCheck": "Check Shipment", "@shipmentCheck": {}, - "shipmentCheckDetail": "Markeer deze levering als gecontroleerd", + "shipmentCheckDetail": "Mark this shipment as checked", "@shipmentCheckDetail": {}, - "shipmentChecked": "Levering gecontroleerd", + "shipmentChecked": "Shipment Checked", "@shipmentChecked": {}, - "shipmentDate": "Leverings Datum", + "shipmentDate": "Shipment Date", "@shipmentDate": {}, - "shipmentEdit": "Wijzig levering", + "shipmentEdit": "Edit Shipment", "@shipmentEdit": {}, "shipmentReference": "Shipment Reference", "@shipmentReference": {}, - "shipmentSend": "Verzending versturen", + "shipmentSend": "Send Shipment", "@shipmentSend": {}, - "shipmentUncheck": "Verzending uitvinken", + "shipmentUncheck": "Uncheck Shipment", "@shipmentUncheck": {}, - "shipmentUncheckDetail": "Markeer deze levering als niet gecontroleerd", + "shipmentUncheckDetail": "Mark this shipment as unchecked", "@shipmentUncheckDetail": {}, - "shipmentUpdated": "Verzending bijgewerkt", + "shipmentUpdated": "Shipment Updated", "@shipmentUpdated": {}, "shipped": "Verzonden", "@shipped": {}, @@ -1112,7 +1112,7 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Totaalprijs", "@totalPrice": {}, - "trackingNumber": "Traceernummer", + "trackingNumber": "Tracking Number", "@trackingNumber": {}, "transfer": "Verplaats", "@transfer": { @@ -1174,7 +1174,7 @@ "@viewSupplierPart": {}, "website": "Website", "@website": {}, - "yes": "Ja", + "yes": "Yes", "@yes": {}, "price": "Prijs", "@price": {}, diff --git a/lib/l10n/pl_PL/app_pl_PL.arb b/lib/l10n/pl_PL/app_pl_PL.arb index 5aa8e5c5..ac7a6c24 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": "Widełki cenowe", + "priceBreaks": "Price Breaks", "@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 adfed52c..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 pentru a întrerupe scanarea", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Scanează pentru a atribui cod de bare", "@barcodeScanAssign": {}, @@ -472,9 +472,9 @@ "@itemUpdated": {}, "keywords": "Cuvinte cheie", "@keywords": {}, - "labelDriver": "Etichetează șofer", + "labelDriver": "Label Driver", "@labelDriver": {}, - "labelSelectDriver": "Selectați șofer de imprimante etichetă", + "labelSelectDriver": "Select Label Printer Driver", "@labelSelectDriver": {}, "labelPrinting": "Printare etichete", "@labelPrinting": {}, @@ -822,386 +822,386 @@ "@response504": {}, "response505": "Versiunea HTTP nu este suportată", "@response505": {}, - "responseData": "Date Răspuns", + "responseData": "Response data", "@responseData": {}, - "responseInvalid": "Cod de răspuns nevalid", + "responseInvalid": "Invalid Response Code", "@responseInvalid": {}, - "responseUnknown": "Răspuns necunoscut", + "responseUnknown": "Unknown Response", "@responseUnknown": {}, - "result": "Rezultat", + "result": "Result", "@result": { "description": "" }, - "returned": "Returnat", + "returned": "Returned", "@returned": {}, - "salesOrder": "Comenzi de Vânzare", + "salesOrder": "Sales Order", "@salesOrder": {}, - "salesOrders": "Comenzi de Vânzare", + "salesOrders": "Sales Orders", "@salesOrders": {}, - "salesOrderEnable": "Activează Comenzile de Vânzări", + "salesOrderEnable": "Enable Sales Orders", "@salesOrderEnable": {}, - "salesOrderEnableDetail": "Activați funcționalitatea comenzilor de vânzare", + "salesOrderEnableDetail": "Enable sales order functionality", "@salesOrderEnableDetail": {}, - "salesOrderShowCamera": "Scurtătura Cameră", + "salesOrderShowCamera": "Camera Shortcut", "@salesOrderShowCamera": {}, - "salesOrderShowCameraDetail": "Activează scurtătura de încărcare a imaginilor pe ecranul comenzii de vânzare", + "salesOrderShowCameraDetail": "Enable image upload shortcut on sales order screen", "@salesOrderShowCameraDetail": {}, - "salesOrderSettings": "Setările comenzii de vânzare", + "salesOrderSettings": "Sales order settings", "@salesOrderSettings": {}, - "salesOrderCreate": "Comandă de vânzări nouă", + "salesOrderCreate": "New Sales Order", "@saleOrderCreate": {}, - "salesOrderEdit": "Editează Comanda de Vânzare", + "salesOrderEdit": "Edit Sales Order", "@salesOrderEdit": {}, - "salesOrderUpdated": "Comanda de vanzare actualizată", + "salesOrderUpdated": "Sales order updated", "@salesOrderUpdated": {}, - "save": "Salvaţi", + "save": "Save", "@save": { "description": "Save" }, - "scanBarcode": "Scanați codul de bare", + "scanBarcode": "Scan Barcode", "@scanBarcode": {}, - "scanSupplierPart": "Scanare cod de bare furnizor", + "scanSupplierPart": "Scan supplier part barcode", "@scanSupplierPart": {}, - "scanIntoLocation": "Scanare în locație", + "scanIntoLocation": "Scan Into Location", "@scanIntoLocation": {}, - "scanIntoLocationDetail": "Scanează acest articol în locație", + "scanIntoLocationDetail": "Scan this item into location", "@scanIntoLocationDetail": {}, - "scannerExternal": "Scanner extern", + "scannerExternal": "External Scanner", "@scannerExternal": {}, - "scannerExternalDetail": "Utilizează scanerul extern pentru a citi codurile de bare (modul wedge)", + "scannerExternalDetail": "Use external scanner to read barcodes (wedge mode)", "@scannerExternalDetail": {}, - "scanReceivedParts": "Scanați capitolele primite", + "scanReceivedParts": "Scan Received Parts", "@scanReceivedParts": {}, - "search": "Caută", + "search": "Search", "@search": { "description": "search" }, - "searching": "Căutare", + "searching": "Searching", "@searching": {}, - "searchLocation": "Căutați locația", + "searchLocation": "Search for location", "@searchLocation": {}, - "searchParts": "Caută componente", + "searchParts": "Search Parts", "@searchParts": {}, - "searchStock": "Căutare Stoc", + "searchStock": "Search Stock", "@searchStock": {}, - "select": "Selectează", + "select": "Select", "@select": {}, - "selectFile": "Selectează fișier", + "selectFile": "Select File", "@selectFile": {}, - "selectImage": "Selectează imagine", + "selectImage": "Select Image", "@selectImage": {}, - "selectLocation": "Selectați o locație", + "selectLocation": "Select a location", "@selectLocation": {}, - "send": "Trimite", + "send": "Send", "@send": {}, - "serialNumber": "Număr de serie", + "serialNumber": "Serial Number", "@serialNumber": {}, - "serialNumbers": "Număr de serie", + "serialNumbers": "Serial Numbers", "@serialNumbers": {}, "server": "Server", "@server": {}, - "serverAddress": "Adresă server", + "serverAddress": "Server Address", "@serverAddress": {}, - "serverApiRequired": "Versiunea API necesară", + "serverApiRequired": "Required API Version", "@serverApiRequired": {}, - "serverApiVersion": "Versiune API server", + "serverApiVersion": "Server API Version", "@serverApiVersion": {}, - "serverAuthenticationError": "Eroare autentificare", + "serverAuthenticationError": "Authentication Error", "@serverAuthenticationError": {}, "serverCertificateError": "Cerficate Error", "@serverCertificateError": {}, - "serverCertificateInvalid": "Certificatul HTTPS al serverului nu este valid", + "serverCertificateInvalid": "Server HTTPS certificate is invalid", "@serverCertificateInvalid": {}, - "serverConnected": "Conectare la server", + "serverConnected": "Connected to Server", "@serverConnected": {}, - "serverConnecting": "Se conecteaza la server", + "serverConnecting": "Connecting to server", "@serverConnecting": {}, - "serverCouldNotConnect": "Nu s-a putut conecta la server", + "serverCouldNotConnect": "Could not connect to server", "@serverCouldNotConnect": {}, - "serverEmpty": "Serverul nu poate fi gol", + "serverEmpty": "Server cannot be empty", "@serverEmpty": {}, - "serverError": "Eroare de server", + "serverError": "Server Error", "@serverError": {}, - "serverDetails": "Detalii despre server", + "serverDetails": "Server Details", "@serverDetails": {}, - "serverMissingData": "Răspuns server lipsă câmpuri obligatorii", + "serverMissingData": "Server response missing required fields", "@serverMissingData": {}, - "serverOld": "Versiunea veche a serverului", + "serverOld": "Old Server Version", "@serverOld": {}, - "serverSettings": "Setări server", + "serverSettings": "Server Settings", "@serverSettings": {}, - "serverStart": "Serverul trebuie să înceapă cu http[s]", + "serverStart": "Server must start with http[s]", "@serverStart": {}, - "settings": "Setări", + "settings": "Settings", "@settings": {}, - "serverInstance": "Instanță server", + "serverInstance": "Server Instance", "@serverInstance": {}, - "serverNotConnected": "Serverul nu este conectat", + "serverNotConnected": "Server not connected", "@serverNotConnected": {}, - "serverNotSelected": "Serverul nu este selectat", + "serverNotSelected": "Server not selected", "@serverNotSelected": {}, - "shipment": "Expediere", + "shipment": "Shipment", "@shipment": {}, - "shipments": "Livrări", + "shipments": "Shipments", "@shipments": {}, - "shipmentsPending": "Livrări în așteptare", + "shipmentsPending": "Pending Shipments", "@shipmentsPending": {}, - "shipmentAdd": "Adaugă livrare", + "shipmentAdd": "Add Shipment", "@shipmentAdd": {}, - "shipmentCheck": "Verifica livrare", + "shipmentCheck": "Check Shipment", "@shipmentCheck": {}, - "shipmentCheckDetail": "Marchează livrarea ca verificată", + "shipmentCheckDetail": "Mark this shipment as checked", "@shipmentCheckDetail": {}, - "shipmentChecked": "Livrare verificată", + "shipmentChecked": "Shipment Checked", "@shipmentChecked": {}, - "shipmentDate": "Data livrării", + "shipmentDate": "Shipment Date", "@shipmentDate": {}, - "shipmentEdit": "Editare livrare", + "shipmentEdit": "Edit Shipment", "@shipmentEdit": {}, - "shipmentReference": "Referință livrare", + "shipmentReference": "Shipment Reference", "@shipmentReference": {}, - "shipmentSend": "Livrare Trimisa", + "shipmentSend": "Send Shipment", "@shipmentSend": {}, - "shipmentUncheck": "Debifează livrare", + "shipmentUncheck": "Uncheck Shipment", "@shipmentUncheck": {}, - "shipmentUncheckDetail": "Marchează livrarea ca nebifat", + "shipmentUncheckDetail": "Mark this shipment as unchecked", "@shipmentUncheckDetail": {}, - "shipmentUpdated": "Livrare actualizată", + "shipmentUpdated": "Shipment Updated", "@shipmentUpdated": {}, - "shipped": "Livrat", + "shipped": "Shipped", "@shipped": {}, "sku": "SKU", "@sku": {}, - "sounds": "Sunete", + "sounds": "Sounds", "@sounds": {}, - "soundOnBarcodeAction": "Redă ton sonor la acțiunea codului de bare", + "soundOnBarcodeAction": "Play audible tone on barcode action", "@soundOnBarcodeAction": {}, - "soundOnServerError": "Redă sunetul sonor la eroarea serverului", + "soundOnServerError": "Play audible tone on server error", "@soundOnServerError": {}, - "startDate": "Data inceput", + "startDate": "Start Date", "@startDate": {}, "status": "Status", "@status": {}, "statusCode": "Status Code", "@statusCode": {}, - "stock": "Stoc", + "stock": "Stock", "@stock": { "description": "stock" }, - "stockDetails": "Stoc disponibil curent", + "stockDetails": "Current available stock quantity", "@stockDetails": {}, - "stockItem": "Articol Stoc", + "stockItem": "Stock Item", "@stockItem": { "description": "stock item title" }, - "stockItems": "Articol Stoc", + "stockItems": "Stock Items", "@stockItems": {}, - "stockItemCreate": "Element nou în stoc", + "stockItemCreate": "New Stock Item", "@stockItemCreate": {}, - "stockItemCreateDetail": "Crează element nou în stoc în această locație", + "stockItemCreateDetail": "Create new stock item in this location", "@stockItemCreateDetail": {}, - "stockItemDelete": "Şterge elementul din stoc", + "stockItemDelete": "Delete Stock Item", "@stockItemDelete": {}, - "stockItemDeleteConfirm": "Sunteţi sigur că doriţi să ştergeţi acest articol din stoc?", + "stockItemDeleteConfirm": "Are you sure you want to delete this stock item?", "@stockItemDeleteConfirm": {}, - "stockItemDeleteFailure": "Nu s-a putut șterge articolul din stoc", + "stockItemDeleteFailure": "Could not delete stock item", "@stockItemDeleteFailure": {}, - "stockItemDeleteSuccess": "Articol șters", + "stockItemDeleteSuccess": "Stock item deleted", "@stockItemDeleteSuccess": {}, - "stockItemHistory": "Istoric Stoc", + "stockItemHistory": "Stock History", "@stockItemHistory": {}, - "stockItemHistoryDetail": "Afişează informaţii istorice de urmărire stoc", + "stockItemHistoryDetail": "Display historical stock tracking information", "@stockItemHistoryDetail": {}, - "stockItemTransferred": "Articol stoc transferat", + "stockItemTransferred": "Stock item transferred", "@stockItemTransferred": {}, - "stockItemUpdated": "Articol stoc actualizat", + "stockItemUpdated": "Stock item updated", "@stockItemUpdated": {}, - "stockItemsNotAvailable": "Nu sunt articole disponibile în stoc", + "stockItemsNotAvailable": "No stock items available", "@stockItemsNotAvailable": {}, - "stockItemNotes": "Note element de stoc", + "stockItemNotes": "Stock Item Notes", "@stockItemNotes": {}, - "stockItemUpdateSuccess": "Articol stoc actualizat", + "stockItemUpdateSuccess": "Stock item updated", "@stockItemUpdateSuccess": {}, - "stockItemUpdateFailure": "Actualizarea articolului stoc a eșuat", + "stockItemUpdateFailure": "Stock item update failed", "@stockItemUpdateFailure": {}, - "stockLocation": "Locația stocului", + "stockLocation": "Stock Location", "@stockLocation": { "description": "stock location" }, - "stockLocations": "Locația stocului", + "stockLocations": "Stock Locations", "@stockLocations": {}, - "stockTopLevel": "Locație stoc nivel superior", + "stockTopLevel": "Top level stock location", "@stockTopLevel": {}, - "strictHttps": "Folosește HTTPS Strict", + "strictHttps": "Use Strict HTTPS", "@strictHttps": {}, - "strictHttpsDetails": "Impune controlul strict al certificatelor HTTP", + "strictHttpsDetails": "Enforce strict checking of HTTPs certificates", "@strictHttpsDetails": {}, - "subcategory": "Subcategorie", + "subcategory": "Subcategory", "@subcategory": {}, - "subcategories": "Subcategorii", + "subcategories": "Subcategories", "@subcategories": {}, - "sublocation": "Sublocare", + "sublocation": "Sublocation", "@sublocation": {}, - "sublocations": "Sublocare", + "sublocations": "Sublocations", "@sublocations": {}, - "sublocationNone": "Fără sublocări", + "sublocationNone": "No Sublocations", "@sublocationNone": {}, - "sublocationNoneDetail": "Nu există sublocații disponibile", + "sublocationNoneDetail": "No sublocations available", "@sublocationNoneDetail": {}, - "submitFeedback": "Trimiteți feedback", + "submitFeedback": "Submit Feedback", "@submitFeedback": {}, - "suppliedParts": "Piese furnizate", + "suppliedParts": "Supplied Parts", "@suppliedParts": {}, - "supplier": "Furnizor", + "supplier": "Supplier", "@supplier": {}, - "supplierPart": "Piesă Furnizor", + "supplierPart": "Supplier Part", "@supplierPart": {}, - "supplierPartEdit": "Editați articol furnizorului", + "supplierPartEdit": "Edit Supplier Part", "@supplierPartEdit": {}, - "supplierPartNumber": "Cod furnizor", + "supplierPartNumber": "Supplier Part Number", "@supplierPartNumber": {}, - "supplierPartUpdated": "Cod furnizor actualizat", + "supplierPartUpdated": "Supplier Part Updated", "@supplierPartUpdated": {}, - "supplierParts": "Piese Furnizor", + "supplierParts": "Supplier Parts", "@supplierParts": {}, - "suppliers": "Furnizori", + "suppliers": "Suppliers", "@suppliers": {}, - "supplierReference": "Cod furnizor", + "supplierReference": "Supplier Reference", "@supplierReference": {}, - "switchCamera": "Comutați Camera", + "switchCamera": "Switch Camera", "@switchCamera": {}, - "takePicture": "Faceți o fotografie", + "takePicture": "Take Picture", "@takePicture": {}, - "targetDate": "Data țintă", + "targetDate": "Target Date", "@targetDate": {}, - "templatePart": "Capitol șablon părinte", + "templatePart": "Parent Template Part", "@templatePart": {}, - "testName": "Nume test", + "testName": "Test Name", "@testName": {}, - "testPassedOrFailed": "Testul a trecut sau a eșuat", + "testPassedOrFailed": "Test passed or failed", "@testPassedOrFailed": {}, - "testsRequired": "Teste necesare", + "testsRequired": "Required Tests", "@testsRequired": {}, - "testResults": "Rezultatele testului", + "testResults": "Test Results", "@testResults": { "description": "" }, - "testResultsDetail": "Afișează rezultatele testului produsului în stoc", + "testResultsDetail": "Display stock item test results", "@testResultsDetail": {}, - "testResultAdd": "Adăugare rezultat test", + "testResultAdd": "Add Test Result", "@testResultAdd": {}, - "testResultNone": "Niciun rezultat de test", + "testResultNone": "No Test Results", "@testResultNone": {}, - "testResultNoneDetail": "Nici un rezultat de test disponibil", + "testResultNoneDetail": "No test results available", "@testResultNoneDetail": {}, - "testResultUploadFail": "Eroare încărcare rezultat test", + "testResultUploadFail": "Error uploading test result", "@testResultUploadFail": {}, - "testResultUploadPass": "Rezultat test încărcat", + "testResultUploadPass": "Test result uploaded", "@testResultUploadPass": {}, "timeout": "Timeout", "@timeout": { "description": "" }, - "toggleTorch": "Comutare lanternă", + "toggleTorch": "Toggle Torch", "@toggleTorch": {}, - "tokenError": "Eroare token", + "tokenError": "Token Error", "@tokenError": {}, - "tokenMissing": "Token lipsă", + "tokenMissing": "Missing Token", "@tokenMissing": {}, - "tokenMissingFromResponse": "Token-ul de acces lipsește din răspuns", + "tokenMissingFromResponse": "Access token missing from response", "@tokenMissingFromResponse": {}, - "totalPrice": "Preț total", + "totalPrice": "Total Price", "@totalPrice": {}, - "trackingNumber": "Număr de urmărire", + "trackingNumber": "Tracking Number", "@trackingNumber": {}, "transfer": "Transfer", "@transfer": { "description": "transfer" }, - "transferStock": "Transfera stoc", + "transferStock": "Transfer Stock", "@transferStock": { "description": "transfer stock" }, - "transferStockDetail": "Transferați articolul într-o locație diferită", + "transferStockDetail": "Transfer item to a different location", "@transferStockDetail": {}, - "transferStockLocation": "Transfer locație stoc", + "transferStockLocation": "Transfer Stock Location", "@transferStockLocation": {}, - "transferStockLocationDetail": "Transferați această locație a stocului în alta", + "transferStockLocationDetail": "Transfer this stock location into another", "@transferStockLocationDetail": {}, - "translate": "Traduceți", + "translate": "Translate", "@translate": {}, - "translateHelp": "Ajută la traducerea aplicației InvenTree", + "translateHelp": "Help translate the InvenTree app", "@translateHelp": {}, - "unavailable": "Indisponibil", + "unavailable": "Unavailable", "@unavailable": {}, - "unavailableDetail": "Articolul nu este disponibil", + "unavailableDetail": "Item is not available", "@unavailableDetail": {}, - "unitPrice": "Preţ Unitar", + "unitPrice": "Unit Price", "@unitPrice": {}, - "units": "Unități", + "units": "Units", "@units": {}, - "unknownResponse": "Răspuns necunoscut", + "unknownResponse": "Unknown Response", "@unknownResponse": {}, - "upload": "Încărcaţi", + "upload": "Upload", "@upload": {}, - "uploadFailed": "Încărcare fișier eșuată", + "uploadFailed": "File upload failed", "@uploadFailed": {}, - "uploadSuccess": "Fişier încărcat", + "uploadSuccess": "File uploaded", "@uploadSuccess": {}, - "uploadImage": "Încărcare imagine", + "uploadImage": "Upload Image", "@uploadImage": {}, - "usedIn": "Folosite în", + "usedIn": "Used In", "@usedIn": {}, - "usedInDetails": "Ansambluri care necesită aceast articol", + "usedInDetails": "Assemblies which require this part", "@usedInDetails": {}, "username": "Nume utilizator", "@username": {}, "usernameEmpty": "Numele de utilizator nu poate fi gol", "@usernameEmpty": {}, - "value": "Valoare", + "value": "Value", "@value": { "description": "value" }, - "valueCannotBeEmpty": "Valoarea nu poate fi goală", + "valueCannotBeEmpty": "Value cannot be empty", "@valueCannotBeEmpty": {}, - "valueRequired": "Valoarea este obligatorie", + "valueRequired": "Value is required", "@valueRequired": {}, - "variants": "Variante", + "variants": "Variants", "@variants": {}, - "version": "Verisune", + "version": "Version", "@version": {}, - "viewSupplierPart": "Vezi capitol furnizor", + "viewSupplierPart": "View Supplier Part", "@viewSupplierPart": {}, "website": "Website", "@website": {}, - "yes": "Da", + "yes": "Yes", "@yes": {}, - "price": "Preț", + "price": "Price", "@price": {}, - "priceRange": "Interval de preț", + "priceRange": "Price Range", "@priceRange": {}, - "priceOverrideMin": "Suprascriere Preț Minim", + "priceOverrideMin": "Minimum Price Override", "@priceOverrideMin": {}, - "priceOverrideMax": "Suprascriere de preț maximă", + "priceOverrideMax": "Maximum Price Override", "@priceOverrideMax": {}, - "salePrice": "Preț de vânzare", + "salePrice": "Sale Price", "@salePrice": {}, - "saleHistory": "Istoric vanzari", + "saleHistory": "Sale History", "@saleHistory": {}, - "supplierPricing": "Prețurile furnizorului", + "supplierPricing": "Supplier Pricing", "@supplierPricing": {}, - "bomCost": "Cost BOM", + "bomCost": "BOM Cost", "@bomCost": {}, - "internalCost": "Cost intern", + "internalCost": "Internal Cost", "@internalCost": {}, - "variantCost": "Cost variantă", + "variantCost": "Variant Cost", "@variantCost": {}, - "overallPricing": "Preț general", + "overallPricing": "Overall Pricing", "@overallPricing": {}, - "pricingOverrides": "Suprascrieri preturi", + "pricingOverrides": "Pricing Overrides", "@pricingOverrides": {}, - "currency": "Monedă", + "currency": "Currency", "@currency": {}, - "priceBreaks": "Reduceri de preț", + "priceBreaks": "Price Breaks", "@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 8eb938f9..fa9f15bc 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": "Зарезервированные остатки", + "allocatedStock": "Allocated Stock", "@allocatedStock": {}, "appReleaseNotes": "Показать заметки о выпуске приложения", "@appReleaseNotes": {}, @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Сканирование штрих-кода приостановлено", "@barodeScanPaused": {}, - "barcodeScanPause": "Нажмите, чтобы приостановить сканирование", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Сканировать для присвоения штрих-кода", "@barcodeScanAssign": {}, @@ -240,7 +240,7 @@ "@deletePartDetail": {}, "deleteSuccess": "Удаление успешно завершено", "@deleteSuccess": {}, - "deliveryDate": "Дата доставки", + "deliveryDate": "Delivery Date", "@deliveryDate": {}, "description": "Описание", "@description": {}, @@ -384,9 +384,9 @@ "@homeShowPo": {}, "homeShowPoDescription": "Показывать кнопку заказа на главном экране", "@homeShowPoDescription": {}, - "homeShowShipments": "Показать отгрузки", + "homeShowShipments": "Show Shipments", "@homeShowShipments": {}, - "homeShowShipmentsDescription": "Показывать ожидающие отгрузки на главном экране", + "homeShowShipmentsDescription": "Show pending shipments on the home screen", "@homeShowShipmentsDescription": {}, "homeShowSo": "Показать заказы на продажу", "@homeShowSo": {}, @@ -454,9 +454,9 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Неверная комбинация имени пользователя и пароля", "@invalidUsernamePassword": {}, - "invoice": "Счет", + "invoice": "Invoice", "@invoice": {}, - "invoiceNumber": "Номер счета", + "invoiceNumber": "Invoice Number", "@invoiceNumber": {}, "issue": "Оформить", "@issue": {}, @@ -472,9 +472,9 @@ "@itemUpdated": {}, "keywords": "Ключевые слова", "@keywords": {}, - "labelDriver": "Драйвер принтера этикеток", + "labelDriver": "Label Driver", "@labelDriver": {}, - "labelSelectDriver": "Выберите драйвер принтера этикеток", + "labelSelectDriver": "Select Label Printer Driver", "@labelSelectDriver": {}, "labelPrinting": "Печать этикеток", "@labelPrinting": {}, @@ -514,7 +514,7 @@ "@locationCreate": {}, "locationCreateDetail": "Создать новое расположение склада", "@locationCreateDetail": {}, - "locationDefault": "Расположение по умолчанию", + "locationDefault": "Default Location", "@locationDefault": {}, "locationNotSet": "Не указано месторасположение", "@locationNotSet": {}, @@ -544,9 +544,9 @@ "@missingData": {}, "name": "Название", "@name": {}, - "no": "Нет", + "no": "No", "@no": {}, - "notApplicable": "Н/Д", + "notApplicable": "N/A", "@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": "Ожидающие отгрузки", + "shipmentsPending": "Pending Shipments", "@shipmentsPending": {}, "shipmentAdd": "Новое Отправление", "@shipmentAdd": {}, - "shipmentCheck": "Проверить отгрузку", + "shipmentCheck": "Check Shipment", "@shipmentCheck": {}, - "shipmentCheckDetail": "Отметить этот груз как проверенный", + "shipmentCheckDetail": "Mark this shipment as checked", "@shipmentCheckDetail": {}, - "shipmentChecked": "Отгрузка проверена", + "shipmentChecked": "Shipment Checked", "@shipmentChecked": {}, - "shipmentDate": "Дата отгрузки", + "shipmentDate": "Shipment Date", "@shipmentDate": {}, - "shipmentEdit": "Редактировать отгрузку", + "shipmentEdit": "Edit Shipment", "@shipmentEdit": {}, - "shipmentReference": "Ссылка на отгрузку", + "shipmentReference": "Shipment Reference", "@shipmentReference": {}, - "shipmentSend": "Отправить отгрузку", + "shipmentSend": "Send Shipment", "@shipmentSend": {}, - "shipmentUncheck": "Снять отметку с отгрузки", + "shipmentUncheck": "Uncheck Shipment", "@shipmentUncheck": {}, - "shipmentUncheckDetail": "Отметить этот груз как непроверенный", + "shipmentUncheckDetail": "Mark this shipment as unchecked", "@shipmentUncheckDetail": {}, - "shipmentUpdated": "Отгрузка обновлена", + "shipmentUpdated": "Shipment Updated", "@shipmentUpdated": {}, "shipped": "Отгружено", "@shipped": {}, @@ -1112,7 +1112,7 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Общая стоимость", "@totalPrice": {}, - "trackingNumber": "Номер отслеживания", + "trackingNumber": "Tracking Number", "@trackingNumber": {}, "transfer": "Перемещение", "@transfer": { @@ -1174,7 +1174,7 @@ "@viewSupplierPart": {}, "website": "Сайт", "@website": {}, - "yes": "Да", + "yes": "Yes", "@yes": {}, "price": "Цена", "@price": {}, diff --git a/lib/l10n/sv_SE/app_sv_SE.arb b/lib/l10n/sv_SE/app_sv_SE.arb index 88d8b85f..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 för att pausa skanning", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Skanna för att tilldela streckkod", "@barcodeScanAssign": {}, @@ -228,7 +228,7 @@ "@delete": {}, "deleteFailed": "Borttagning misslyckades", "@deleteFailed": {}, - "deleteImageConfirmation": "Är du säker på att du vill radera denna bild?", + "deleteImageConfirmation": "Are you sure you want to delete this image?", "@deleteImageConfirmation": {}, "deleteImageTooltip": "Radera bild", "@deleteImageTooltip": {}, @@ -240,7 +240,7 @@ "@deletePartDetail": {}, "deleteSuccess": "Borttagning lyckad", "@deleteSuccess": {}, - "deliveryDate": "Leveransdatum", + "deliveryDate": "Delivery Date", "@deliveryDate": {}, "description": "Beskrivning", "@description": {}, @@ -384,9 +384,9 @@ "@homeShowPo": {}, "homeShowPoDescription": "Visa knappen för inköpsorder på startskärmen", "@homeShowPoDescription": {}, - "homeShowShipments": "Visa leveranser", + "homeShowShipments": "Show Shipments", "@homeShowShipments": {}, - "homeShowShipmentsDescription": "Visa väntande leveranser på startskärmen", + "homeShowShipmentsDescription": "Show pending shipments on the home screen", "@homeShowShipmentsDescription": {}, "homeShowSo": "Visa försäljningsorder", "@homeShowSo": {}, @@ -514,7 +514,7 @@ "@locationCreate": {}, "locationCreateDetail": "Skapa ny lagerplats", "@locationCreateDetail": {}, - "locationDefault": "Förvald plats", + "locationDefault": "Default Location", "@locationDefault": {}, "locationNotSet": "Ingen plats specificerad", "@locationNotSet": {}, @@ -564,9 +564,9 @@ "@noResults": {}, "noImageAvailable": "Ingen bild tillgänglig", "@noImageAvailable": {}, - "noPricingAvailable": "Ingen prisinformation tillgänglig", + "noPricingAvailable": "No pricing available", "@noPricingAvailable": {}, - "noPricingDataFound": "Inga prisuppgifter hittades för denna artikel", + "noPricingDataFound": "No pricing data found for this part", "@noPricingDataFound": {}, "noSubcategories": "Inga underkategorier", "@noSubcategories": {}, @@ -630,7 +630,7 @@ "@partsNone": {}, "partNoResults": "Inga artiklar som matchar sökfrågan", "@partNoResults": {}, - "partPricing": "Artikelpris", + "partPricing": "Part Pricing", "@partPricing": {}, "partPricingSettingDetail": "Display part pricing information", "@pricingSettingDetail": {}, @@ -762,7 +762,7 @@ "@reference": {}, "refresh": "Uppdatera", "@refresh": {}, - "rotateClockwise": "Rotera 90° medurs", + "rotateClockwise": "Rotate 90° clockwise", "@rotateClockwise": {}, "refreshing": "Uppdaterar", "@refreshing": {}, @@ -940,7 +940,7 @@ "@serverNotConnected": {}, "serverNotSelected": "Servern är inte vald", "@serverNotSelected": {}, - "shipment": "Försändelse", + "shipment": "Shipment", "@shipment": {}, "shipments": "Frakt", "@shipments": {}, @@ -954,7 +954,7 @@ "@shipmentCheckDetail": {}, "shipmentChecked": "Shipment Checked", "@shipmentChecked": {}, - "shipmentDate": "Leveransdatum", + "shipmentDate": "Shipment Date", "@shipmentDate": {}, "shipmentEdit": "Edit Shipment", "@shipmentEdit": {}, @@ -1112,7 +1112,7 @@ "@tokenMissingFromResponse": {}, "totalPrice": "Totalpris", "@totalPrice": {}, - "trackingNumber": "Sändningsnummer", + "trackingNumber": "Tracking Number", "@trackingNumber": {}, "transfer": "Överföring", "@transfer": { @@ -1184,11 +1184,11 @@ "@priceOverrideMin": {}, "priceOverrideMax": "Maximum Price Override", "@priceOverrideMax": {}, - "salePrice": "Försäljningspris", + "salePrice": "Sale Price", "@salePrice": {}, "saleHistory": "Sale History", "@saleHistory": {}, - "supplierPricing": "Leverantörspriser", + "supplierPricing": "Supplier Pricing", "@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 2281a9a3..dfffe0e6 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 Ayrıntıları", + "accountDetails": "Hesap Detayları", "@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,11 +44,11 @@ "@aspectRatio4x3": {}, "aspectRatioSquare": "Kare (1:1)", "@aspectRatioSquare": {}, - "allocateStock": "Stoku Tahsis Et", + "allocateStock": "Tahsisli stok", "@allocateStock": {}, "allocatedStock": "Tahsis Edilen Stok", "@allocatedStock": {}, - "appReleaseNotes": "Uygulama yayınlama notlarını görüntüle", + "appReleaseNotes": "Uygulama yayınlama notlarını göster", "@appReleaseNotes": {}, "appSettings": "Uygulama Ayarları", "@appSettings": {}, @@ -60,7 +60,7 @@ "@assignedToMeDetail": {}, "attachments": "Ekler", "@attachments": {}, - "attachImage": "Görsel Ekle", + "attachImage": "Resim ekle", "@attachImage": { "description": "Attach an image" }, @@ -98,11 +98,11 @@ "@barcodeNotAssigned": {}, "barcodeScanPart": "Parça barkodnu tara", "@barcodeScanPart": {}, - "barcodeReceivePart": "Parçayı teslim almak için barkodu tarayın", + "barcodeReceivePart": "Tesellüm barkodunu tara", "@barcodeReceivePart": {}, "barcodeScanPaused": "Barkod tarama duraklatıldı", "@barodeScanPaused": {}, - "barcodeScanPause": "Taramayı duraklatmak için dokunun", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Atanmış barkodu tara", "@barcodeScanAssign": {}, @@ -116,7 +116,7 @@ "@barcodeScanDelayDetail": {}, "barcodeScanGeneral": "Bir InvenTree barkodu tara", "@barcodeScanGeneral": {}, - "barcodeScanInItems": "Stok kalemlerini bu konumun içine tara", + "barcodeScanInItems": "Stok ögelerini bu konum içine tara", "@barcodeScanInItems": {}, "barcodeScanLocation": "Stok konumu tara", "@barcodeScanLocation": {}, @@ -128,7 +128,7 @@ "@barcodeScanIntoLocationSuccess": {}, "barcodeScanIntoLocationFailure": "Madde taranmış değil", "@barcodeScanIntoLocationFailure": {}, - "barcodeScanItem": "Stok kalemi tara", + "barcodeScanItem": "Stok öğesi tara", "@barcodeScanItem": {}, "barcodeTones": "Barkod Tonları", "@barcodeTones": {}, @@ -138,15 +138,15 @@ "@barcodeUnknown": {}, "batchCode": "Grup kodu", "@batchCode": {}, - "billOfMaterials": "Ürün Ağacı", + "billOfMaterials": "Fatura materyalleri", "@billOfMaterials": {}, "bom": "BOM", "@bom": {}, - "bomEnable": "Ürün Ağacını Görüntüle", + "bomEnable": "Malzeme Listesini Görüntüle", "@bomEnable": {}, - "build": "Üret", + "build": "Oluştur", "@build": {}, - "building": "Üretiliyor", + "building": "Oluşturma", "@building": {}, "cameraCreationError": "Kamera Kontrolcüsü Açılamadı", "@cameraCreationError": {}, @@ -176,7 +176,7 @@ "@companyEdit": {}, "companyNoResults": "Sorguyla eşleşen şirket yok", "@companyNoResults": {}, - "companyUpdated": "Şirket bilgileri güncellendi", + "companyUpdated": "Firma bilgileri güncellendi", "@companyUpdated": {}, "companies": "Şirketler", "@companies": {}, @@ -206,7 +206,7 @@ "@credits": {}, "crop": "Kırp", "@crop": {}, - "cropImage": "Görseli Kırp", + "cropImage": "Resmi Kırp", "@cropImage": {}, "customer": "Müşteri", "@customer": {}, @@ -228,11 +228,11 @@ "@delete": {}, "deleteFailed": "Silme işlemi başarısız", "@deleteFailed": {}, - "deleteImageConfirmation": "Bu görseli silmek istediğinize emin misiniz?", + "deleteImageConfirmation": "Bu resmi silmek istediğinizden emin misiniz?", "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Görseli Sil", + "deleteImageTooltip": "Görüntüyü Sil", "@deleteImageTooltip": {}, - "deleteImage": "Görseli sil", + "deleteImage": "Resmi sil", "@deleteImage": {}, "deletePart": "Parça Sil", "@deletePart": {}, @@ -244,11 +244,11 @@ "@deliveryDate": {}, "description": "Açıklama", "@description": {}, - "destination": "Hedef", + "destination": "Varış Yeri", "@destination": {}, "destroyed": "Yok edildi", "@destroyed": {}, - "details": "Ayrıntılar", + "details": "Detaylar", "@details": { "description": "details" }, @@ -278,9 +278,9 @@ "@editPart": { "description": "edit part" }, - "editItem": "Stok kalemi düzenle", + "editItem": "Parçayı Düzenle", "@editItem": {}, - "editLineItem": "Satırı Düzenle", + "editLineItem": "Satır Ögesini Düzenle", "@editLineItem": {}, "email": "E-posta", "@email": {}, @@ -316,9 +316,9 @@ "@expiryExpired": {}, "expiryStale": "Eskimiş", "@expiryStale": {}, - "extraLineItem": "Ek Kalem", + "extraLineItem": "Fazladan Satır Ögesi", "@extraLineItem": {}, - "extraLineItems": "Ek Kalemler", + "extraLineItems": "Fazladan Satır Ögeleri", "@extraLineItems": {}, "feedback": "Geri Bildirim", "@feedback": {}, @@ -348,7 +348,7 @@ "@filterInStockDetail": {}, "filterSerialized": "Sıralandırılmış", "@filterSerialized": {}, - "filterSerializedDetail": "Seri numaralı stok kalemlerini göster", + "filterSerializedDetail": "Sıralandırılmış stok ürünkerini göster", "@filterSerializedDetail": {}, "filterTemplate": "Şablon", "@filterTemplate": {}, @@ -392,9 +392,9 @@ "@homeShowSo": {}, "homeShowSoDescription": "Satış siparişleri tuşunu giriş ekranında göster", "@homeShowSoDescription": {}, - "homeShowSubscribed": "Takip Edilen Parçalar", + "homeShowSubscribed": "Parça bildirimlerine abone ol", "@homeShowSubscribed": {}, - "homeShowSubscribedDescription": "Takip edilen parçaları ana ekranda göster", + "homeShowSubscribedDescription": "Abone olunan bölümleri 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": "Görsel yükleme başarısız", + "imageUploadFailure": "Fotoğraf yükleme başarısız", "@imageUploadFailure": {}, - "imageUploadSuccess": "Görsel yüklendi", + "imageUploadSuccess": "Resim yüklendi", "@imageUploadSuccess": {}, "inactive": "Pasif", "@inactive": {}, - "inactiveCompany": "Bu şirket pasif olarak işaretlendi", + "inactiveCompany": "Bu şirket inaktif olarak imlendi", "@inactiveCompany": {}, "inactiveDetail": "Bu parça pasif olarak işaretlendi", "@inactiveDetail": {}, @@ -432,9 +432,9 @@ "@internalPartNumber": {}, "info": "Bilgi", "@info": {}, - "inProduction": "Üretimde", + "inProduction": "Yapım Aşamasında", "@inProduction": {}, - "inProductionDetail": "Bu stok kalemi üretimdedir", + "inProductionDetail": "Bu ürün üretim aşamasında", "@inProductionDetail": {}, "internalPart": "İç Parça", "@internalPart": {}, @@ -448,7 +448,7 @@ "@invalidPartCategory": {}, "invalidStockLocation": "Geçersiz Stok Konumu", "@invalidStockLocation": {}, - "invalidStockItem": "Geçersiz Stok Kalemi", + "invalidStockItem": "Geçersiz Stok Parçası", "@invalidStockItem": {}, "invalidSupplierPart": "Geçersiz Tedarikçi Parçası", "@invalidSupplierPart": {}, @@ -462,7 +462,7 @@ "@issue": {}, "issueDate": "Sorun Tarihi", "@issueDate": {}, - "issueOrder": "Sipariş Düzenle", + "issueOrder": "Sipariş Ver", "@issueOrder": {}, "itemInLocation": "Parça zaten konumda", "@itemInLocation": {}, @@ -472,13 +472,13 @@ "@itemUpdated": {}, "keywords": "Anahtar kelimeler", "@keywords": {}, - "labelDriver": "Etiket Sürücü", + "labelDriver": "Label Driver", "@labelDriver": {}, - "labelSelectDriver": "Etiket Yazıcı Sürücüsü Seçin", + "labelSelectDriver": "Select Label Printer Driver", "@labelSelectDriver": {}, "labelPrinting": "Etiket Yazdırma", "@labelPrinting": {}, - "labelPrintingDetail": "Etiket yazdırmayı etkinleştir", + "labelPrintingDetail": "Etiket yazdırmayı aktifleştir", "@labelPrintingDetail": {}, "labelTemplate": "Etiket Şablonu", "@labelTemplate": {}, @@ -492,21 +492,21 @@ "@languageDefault": {}, "languageSelect": "Dil Seçin", "@languageSelect": {}, - "lastStocktake": "Son Stok Sayımı", + "lastStocktake": "Son stok tutma", "@lastStocktake": {}, "lastUpdated": "Son güncelleme", "@lastUpdated": {}, - "level": "Seviye", + "level": "Düzey", "@level": {}, - "lineItemAdd": "Satır Ekle", + "lineItemAdd": "Satır Ögesi Ekle", "@lineItemAdd": {}, - "lineItem": "Satır", + "lineItem": "Parça Sırası", "@lineItem": {}, - "lineItems": "Satırlar", + "lineItems": "Parçalar Sırası", "@lineItems": {}, - "lineItemUpdated": "Satır güncellendi", + "lineItemUpdated": "Satır ögesi güncellendi", "@lineItemUpdated": {}, - "locateItem": "Stok kalemi bul", + "locateItem": "Stok ögesi bul", "@locateItem": {}, "locateLocation": "Stok konumu bul", "@locateLocation": {}, @@ -514,7 +514,7 @@ "@locationCreate": {}, "locationCreateDetail": "Yeni stok konumu oluştur", "@locationCreateDetail": {}, - "locationDefault": "Varsayılan Konum", + "locationDefault": "Default Location", "@locationDefault": {}, "locationNotSet": "Belirtilmiş konum yok", "@locationNotSet": {}, @@ -562,7 +562,7 @@ "@noResponse": {}, "noResults": "Sonuç Yok", "@noResults": {}, - "noImageAvailable": "Görsel yok", + "noImageAvailable": "Kullanılabilir resim yok", "@noImageAvailable": {}, "noPricingAvailable": "Fiyatlandırma mevcut değil", "@noPricingAvailable": {}, @@ -588,9 +588,9 @@ "@orientationPortrait": {}, "orientationSystem": "Sistem", "@orientationSystem": {}, - "outstanding": "Açık", + "outstanding": "Beklemede", "@outstanding": {}, - "outstandingOrderDetail": "Açık siparişleri göster", + "outstandingOrderDetail": "Bekleyen siparişleri göster", "@outstandingOrderDetail": {}, "overdue": "Gecikmede", "@overdue": {}, @@ -602,7 +602,7 @@ "@packageName": {}, "parameters": "Parametreler", "@parameters": {}, - "parametersSettingDetail": "Parça parametrelerini görüntüle", + "parametersSettingDetail": "Parça parametrelerini göster", "@parametersSettingDetail": {}, "parent": "Üst", "@parent": {}, @@ -624,7 +624,7 @@ "@parts": { "description": "Part (multiple)" }, - "partNotSalable": "Parça satılabilir olarak işaretli değil", + "partNotSalable": "Parça satılabilir olarak imlenmemiş", "@partNotSalable": {}, "partsNone": "Parça Yok", "@partsNone": {}, @@ -636,7 +636,7 @@ "@pricingSettingDetail": {}, "partSettings": "Parça Ayarları", "@partSettings": {}, - "partsStarred": "Takip Edilen Parçalar", + "partsStarred": "Sürekli Gelen parçalar", "@partsStarred": {}, "partsStarredNone": "Yıldızlı parça yok", "@partsStarredNone": {}, @@ -648,7 +648,7 @@ "@partCategoryTopLevel": {}, "partCategories": "Parça Kategorileri", "@partCategories": {}, - "partDetails": "Parça Ayrıntıları", + "partDetails": "Parça detayları", "@partDetails": {}, "partNotes": "Parça notları", "@partNotes": {}, @@ -710,15 +710,15 @@ "@projectCode": {}, "purchaseOrderConfirmScan": "Tarama Verisini Onayla", "@purchaseOrderConfirmScan": {}, - "purchaseOrderConfirmScanDetail": "Kalemleri tararken ayrıntıları onayla", + "purchaseOrderConfirmScanDetail": "Taranan Ürünlerin Detaylarını Onayla", "@purchaseOrderConfirmScanDetail": {}, - "purchaseOrderEnable": "Satın Alma Siparişlerini Etkinleştir", + "purchaseOrderEnable": "Satın Alma Emirlerini Etkinleştir", "@purchaseOrderEnable": {}, "purchaseOrderEnableDetail": "Satın Alma Emirlerinin İşlevselliğini Etkinleştir", "@purchaseOrderEnableDetail": {}, "purchaseOrderShowCamera": "Kamera Kısayolu", "@purchaseOrderShowCamera": {}, - "purchaseOrderShowCameraDetail": "Satın alma siparişi ekranında görsel yükleme kısayolunu etkinleştir", + "purchaseOrderShowCameraDetail": "Satın alma emirleri ekranında fotoğraf yükleme kısayolunu etkinleştir", "@purchaseOrderShowCameraDetail": {}, "purchaseOrder": "Satınalma Siparişi", "@purchaseOrder": {}, @@ -728,7 +728,7 @@ "@purchaseOrderEdit": {}, "purchaseOrderSettings": "Satın Alma Emri Ayarları", "@purchaseOrderSettings": {}, - "purchaseOrders": "Satın Alma Siparişleri", + "purchaseOrders": "Satınalma Siparişleri", "@purchaseOrders": {}, "purchaseOrderUpdated": "Satın Alma Siparişi güncellendi", "@purchaseOrderUpdated": {}, @@ -750,13 +750,13 @@ "@queryEmpty": {}, "queryNoResults": "Sorgu için sonuç yok", "@queryNoResults": {}, - "received": "Teslim Alındı", + "received": "Alınan", "@received": {}, - "receivedFilterDetail": "Teslim alınan kalemleri göster", + "receivedFilterDetail": "Alınan ögeleri göster", "@receivedFilterDetail": {}, - "receiveItem": "Kalemi Teslim Al", + "receiveItem": "Alınan Öğeler", "@receiveItem": {}, - "receivedItem": "Teslim alınan stok kalemleri", + "receivedItem": "Alınan stok parçaları", "@receivedItem": {}, "reference": "Referans", "@reference": {}, @@ -838,13 +838,13 @@ "@salesOrder": {}, "salesOrders": "Satış Siparişleri", "@salesOrders": {}, - "salesOrderEnable": "Satış Siparişlerini Etkinleştir", + "salesOrderEnable": "Satış Emirlerini Etkinleştir", "@salesOrderEnable": {}, "salesOrderEnableDetail": "Satış Siparişlerinin İşlevselliğini Etkinleştir", "@salesOrderEnableDetail": {}, "salesOrderShowCamera": "Kamera Kısayolu", "@salesOrderShowCamera": {}, - "salesOrderShowCameraDetail": "Satış siparişi ekranında görsel yükleme kısayolunu etkinleştir", + "salesOrderShowCameraDetail": "Satış emirleri ekranında fotoğraf yükleme kısayolunu etkinleştir", "@salesOrderShowCameraDetail": {}, "salesOrderSettings": "Satış emirleri ayarları", "@salesOrderSettings": {}, @@ -860,7 +860,7 @@ }, "scanBarcode": "Barkod Tara", "@scanBarcode": {}, - "scanSupplierPart": "Tedarikçi parça barkodunu tara", + "scanSupplierPart": "Sağlayıcı parça barkodunu tara", "@scanSupplierPart": {}, "scanIntoLocation": "Konuma Tara", "@scanIntoLocation": {}, @@ -870,7 +870,7 @@ "@scannerExternal": {}, "scannerExternalDetail": "Barkodları okumak için harici tarayıcı kullan (keyboard wedge modu)", "@scannerExternalDetail": {}, - "scanReceivedParts": "Teslim Alınan Parçaları Tara", + "scanReceivedParts": "Alınan Parçaları Tara", "@scanReceivedParts": {}, "search": "Ara", "@search": { @@ -888,7 +888,7 @@ "@select": {}, "selectFile": "Dosya Seç", "@selectFile": {}, - "selectImage": "Görsel Seç", + "selectImage": "Resim Seç", "@selectImage": {}, "selectLocation": "Bir yer seçin", "@selectLocation": {}, @@ -922,7 +922,7 @@ "@serverEmpty": {}, "serverError": "Sunucu Hatası", "@serverError": {}, - "serverDetails": "Sunucu Ayrıntıları", + "serverDetails": "Sunucu Detayları", "@serverDetails": {}, "serverMissingData": "Sunucu yanıtında gerekli alanlar eksik", "@serverMissingData": {}, @@ -948,11 +948,11 @@ "@shipmentsPending": {}, "shipmentAdd": "Gönderi Ekle", "@shipmentAdd": {}, - "shipmentCheck": "Sevkiyatı Kontrol Et", + "shipmentCheck": "Teslimatı Kontrol Et", "@shipmentCheck": {}, - "shipmentCheckDetail": "Bu sevkiyatı kontrol edildi olarak işaretle", + "shipmentCheckDetail": "Bu teslimatı kontrol edildi olarak işaretle", "@shipmentCheckDetail": {}, - "shipmentChecked": "Sevkiyat Kontrol Edildi", + "shipmentChecked": "Teslimat Kontrol Edildi", "@shipmentChecked": {}, "shipmentDate": "Teslimat Tarihi", "@shipmentDate": {}, @@ -962,7 +962,7 @@ "@shipmentReference": {}, "shipmentSend": "Teslimatı Gönder", "@shipmentSend": {}, - "shipmentUncheck": "Sevkiyat Kontrolünü Kaldır", + "shipmentUncheck": "Teslimat İşaretini Kaldır", "@shipmentUncheck": {}, "shipmentUncheckDetail": "Bu teslimatı kontrol edilmedi olarak işaretle", "@shipmentUncheckDetail": {}, @@ -998,25 +998,25 @@ "@stockItems": {}, "stockItemCreate": "Yeni Stok Kalemi", "@stockItemCreate": {}, - "stockItemCreateDetail": "Bu konumda yeni stok kalemi oluştur", + "stockItemCreateDetail": "Bu konuma yeni stok kalemi oluştur", "@stockItemCreateDetail": {}, "stockItemDelete": "Stok parçasını sil", "@stockItemDelete": {}, - "stockItemDeleteConfirm": "Bu stok kalemini silmek istediğinize emin misiniz?", + "stockItemDeleteConfirm": "Bu stock ögesini silmek istediğinize emin misiniz?", "@stockItemDeleteConfirm": {}, - "stockItemDeleteFailure": "Stok kalemi silinemedi", + "stockItemDeleteFailure": "Stok parçası silinemedi", "@stockItemDeleteFailure": {}, - "stockItemDeleteSuccess": "Stok kalemi silindi", + "stockItemDeleteSuccess": "Stok ögesi silindi", "@stockItemDeleteSuccess": {}, "stockItemHistory": "Stok Geçmişi", "@stockItemHistory": {}, - "stockItemHistoryDetail": "Geçmiş stok takip bilgisini görüntüle", + "stockItemHistoryDetail": "Geçmiş stok takip bilgisini göster", "@stockItemHistoryDetail": {}, - "stockItemTransferred": "Stok kalemi aktarıldı", + "stockItemTransferred": "Stok ögesi aktarıldı", "@stockItemTransferred": {}, - "stockItemUpdated": "Stok kalemi güncellendi", + "stockItemUpdated": "Stok ögesi güncellendi", "@stockItemUpdated": {}, - "stockItemsNotAvailable": "Stok kalemi bulunmamaktadır", + "stockItemsNotAvailable": "Kullanılabilir stok ögesi yok", "@stockItemsNotAvailable": {}, "stockItemNotes": "Stok Kalemi Notları", "@stockItemNotes": {}, @@ -1056,11 +1056,11 @@ "@supplier": {}, "supplierPart": "Tedarikçi Parçası", "@supplierPart": {}, - "supplierPartEdit": "Tedarikçi Parçasını Düzenle", + "supplierPartEdit": "Sağlayıcı Parçasını Düzenle", "@supplierPartEdit": {}, - "supplierPartNumber": "Tedarikçi Parça Numarası", + "supplierPartNumber": "Sağlayıcı Parça Numarası", "@supplierPartNumber": {}, - "supplierPartUpdated": "Tedarikçi Parçası Güncellendi", + "supplierPartUpdated": "Sağlayıcı Parçası Güncellendi", "@supplierPartUpdated": {}, "supplierParts": "Tedarikçi Parçaları", "@supplierParts": {}, @@ -1086,7 +1086,7 @@ "@testResults": { "description": "" }, - "testResultsDetail": "Stok kalemi test sonuçlarını görüntüle", + "testResultsDetail": "Stok ögesi test sonuçlarını görüntüle", "@testResultsDetail": {}, "testResultAdd": "Test Sonucu Ekle", "@testResultAdd": {}, @@ -1148,7 +1148,7 @@ "@uploadFailed": {}, "uploadSuccess": "Dosya yüklendi", "@uploadSuccess": {}, - "uploadImage": "Görsel Yükle", + "uploadImage": "Resim Yükleyin", "@uploadImage": {}, "usedIn": "Burada Kullanıldı", "@usedIn": {}, @@ -1166,7 +1166,7 @@ "@valueCannotBeEmpty": {}, "valueRequired": "Değer gereklidir", "@valueRequired": {}, - "variants": "Varyantlar", + "variants": "Türevler", "@variants": {}, "version": "Sürüm", "@version": {}, @@ -1188,13 +1188,13 @@ "@salePrice": {}, "saleHistory": "Satış Geçmişi", "@saleHistory": {}, - "supplierPricing": "Tedarikçi Fiyatlandırması", + "supplierPricing": "Sağlayıcı Fiyatlandırması", "@supplierPricing": {}, "bomCost": "BoM Maliyeti", "@bomCost": {}, "internalCost": "Dahili Maliyet", "@internalCost": {}, - "variantCost": "Varyant Maliyeti", + "variantCost": "Türev Maliyeti", "@variantCost": {}, "overallPricing": "Genel Fiyatlandırma", "@overallPricing": {}, @@ -1202,6 +1202,6 @@ "@pricingOverrides": {}, "currency": "Para Birimi", "@currency": {}, - "priceBreaks": "Fiyat Kademeleri", + "priceBreaks": "Fiyat Aralığı", "@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 da21c3af..5eb5c487 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": "Виділений Запас", + "allocatedStock": "Allocated Stock", "@allocatedStock": {}, "appReleaseNotes": "Показати примітки до випуску", "@appReleaseNotes": {}, @@ -102,7 +102,7 @@ "@barcodeReceivePart": {}, "barcodeScanPaused": "Сканування штрих-кодів призупинено", "@barodeScanPaused": {}, - "barcodeScanPause": "Торкніться або утримуйте, щоб призупинити сканування", + "barcodeScanPause": "Tap to pause scanning", "@barcodeScanPause": {}, "barcodeScanAssign": "Сканувати щоб призначити штрих-код", "@barcodeScanAssign": {}, @@ -228,11 +228,11 @@ "@delete": {}, "deleteFailed": "Помилка видалення", "@deleteFailed": {}, - "deleteImageConfirmation": "Ви дійсно хочете видалити це зображення?", + "deleteImageConfirmation": "Are you sure you want to delete this image?", "@deleteImageConfirmation": {}, - "deleteImageTooltip": "Видалити Зображення", + "deleteImageTooltip": "Delete Image", "@deleteImageTooltip": {}, - "deleteImage": "Видалити Зображення", + "deleteImage": "Delete Image", "@deleteImage": {}, "deletePart": "Видалити деталь", "@deletePart": {}, @@ -240,7 +240,7 @@ "@deletePartDetail": {}, "deleteSuccess": "Операція видалення пройшла успішно", "@deleteSuccess": {}, - "deliveryDate": "Дата Доставки", + "deliveryDate": "Delivery Date", "@deliveryDate": {}, "description": "Опис", "@description": {}, @@ -384,9 +384,9 @@ "@homeShowPo": {}, "homeShowPoDescription": "Показувати кнопку замовлення на домашньому екрані", "@homeShowPoDescription": {}, - "homeShowShipments": "Показати відправлення", + "homeShowShipments": "Show Shipments", "@homeShowShipments": {}, - "homeShowShipmentsDescription": "Показати відкладені відправлення на головному екрані", + "homeShowShipmentsDescription": "Show pending shipments on the home screen", "@homeShowShipmentsDescription": {}, "homeShowSo": "Показати замовлення", "@homeShowSo": {}, @@ -454,15 +454,15 @@ "@invalidSupplierPart": {}, "invalidUsernamePassword": "Неправильна комбінація імені користувача та пароля", "@invalidUsernamePassword": {}, - "invoice": "Інвойс", + "invoice": "Invoice", "@invoice": {}, - "invoiceNumber": "Номер Інвойсу", + "invoiceNumber": "Invoice Number", "@invoiceNumber": {}, - "issue": "Видача", + "issue": "Issue", "@issue": {}, - "issueDate": "Дата Видачі", + "issueDate": "Issue Date", "@issueDate": {}, - "issueOrder": "Оформити Замовлення", + "issueOrder": "Issue Order", "@issueOrder": {}, "itemInLocation": "Товар вже на місці", "@itemInLocation": {}, @@ -472,9 +472,9 @@ "@itemUpdated": {}, "keywords": "Ключові слова", "@keywords": {}, - "labelDriver": "Драйвер Етикеток", + "labelDriver": "Label Driver", "@labelDriver": {}, - "labelSelectDriver": "Вибрати Драйвер Принтера Етикеток", + "labelSelectDriver": "Select Label Printer Driver", "@labelSelectDriver": {}, "labelPrinting": "Друк Ярликів", "@labelPrinting": {}, @@ -482,9 +482,9 @@ "@labelPrintingDetail": {}, "labelTemplate": "Шаблон Ярлика", "@labelTemplate": {}, - "labelSelectTemplate": "Вибрати Шаблон Етикетки", + "labelSelectTemplate": "Select Label Template", "@labelSelectTemplate": {}, - "labelSelectPrinter": "Вибрати Принтер Етикеток", + "labelSelectPrinter": "Select Label Printer", "@labelSelectPrinter": {}, "language": "Мова", "@language": {}, @@ -492,19 +492,19 @@ "@languageDefault": {}, "languageSelect": "Вибір мови", "@languageSelect": {}, - "lastStocktake": "Остання інвентаризація", + "lastStocktake": "Last Stocktake", "@lastStocktake": {}, "lastUpdated": "Останнє оновлення", "@lastUpdated": {}, "level": "Рівень", "@level": {}, - "lineItemAdd": "Додати Позицію", + "lineItemAdd": "Add Line Item", "@lineItemAdd": {}, - "lineItem": "Позиція", + "lineItem": "Line Item", "@lineItem": {}, - "lineItems": "Позиції", + "lineItems": "Line Items", "@lineItems": {}, - "lineItemUpdated": "Позицію оновлено", + "lineItemUpdated": "Line item updated", "@lineItemUpdated": {}, "locateItem": "Знайти елемент запасів", "@locateItem": {}, @@ -514,7 +514,7 @@ "@locationCreate": {}, "locationCreateDetail": "Створити нове розташування на складі", "@locationCreateDetail": {}, - "locationDefault": "Розташування за замовчуванням", + "locationDefault": "Default Location", "@locationDefault": {}, "locationNotSet": "Розташування не вказано", "@locationNotSet": {}, @@ -544,9 +544,9 @@ "@missingData": {}, "name": "Назва", "@name": {}, - "no": "Ні", + "no": "No", "@no": {}, - "notApplicable": "Н/Д", + "notApplicable": "N/A", "@notApplicable": {}, "notConnected": "Не під’єднано", "@notConnected": {}, @@ -564,19 +564,19 @@ "@noResults": {}, "noImageAvailable": "Немає доступного зображення", "@noImageAvailable": {}, - "noPricingAvailable": "Ціни не вказано", + "noPricingAvailable": "No pricing available", "@noPricingAvailable": {}, - "noPricingDataFound": "Для цієї деталі не знайдено даних про ціну", + "noPricingDataFound": "No pricing data found for this part", "@noPricingDataFound": {}, - "noSubcategories": "Немає Підкатегорій", + "noSubcategories": "No Subcategories", "@noSubcategories": {}, - "noSubcategoriesAvailable": "Немає доступних підкатегорій", + "noSubcategoriesAvailable": "No subcategories available", "@noSubcategoriesAvailable": {}, "numberInvalid": "Некоректний номер", "@numberInvalid": {}, - "onOrder": "У замовленні", + "onOrder": "On Order", "@onOrder": {}, - "onOrderDetails": "Позиції в поточних замовленнях", + "onOrderDetails": "Items currently on order", "@onOrderDetails": {}, "orientation": "Орієнтація екрана", "@orientation": {}, @@ -632,7 +632,7 @@ "@partNoResults": {}, "partPricing": "Ціна деталі", "@partPricing": {}, - "partPricingSettingDetail": "Відображати інформацію про ціни на деталь", + "partPricingSettingDetail": "Display part pricing information", "@pricingSettingDetail": {}, "partSettings": "Налаштування позиції", "@partSettings": {}, @@ -652,7 +652,7 @@ "@partDetails": {}, "partNotes": "Примітки до позиції", "@partNotes": {}, - "partStock": "Наявність На Складі", + "partStock": "Part Stock", "@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": "Увімкнути Закупівлю", + "purchaseOrderEnable": "Enable Purchase Orders", "@purchaseOrderEnable": {}, - "purchaseOrderEnableDetail": "Увімкнути функціонал закупівлі", + "purchaseOrderEnableDetail": "Enable purchase order functionality", "@purchaseOrderEnableDetail": {}, - "purchaseOrderShowCamera": "Швидкий Доступ до Камери", + "purchaseOrderShowCamera": "Camera Shortcut", "@purchaseOrderShowCamera": {}, - "purchaseOrderShowCameraDetail": "Увімкнути ярлик для завантаження зображень на екрані закупівель", + "purchaseOrderShowCameraDetail": "Enable image upload shortcut on purchase order screen", "@purchaseOrderShowCameraDetail": {}, - "purchaseOrder": "Замовлення на Закупівлю", + "purchaseOrder": "Purchase Order", "@purchaseOrder": {}, - "purchaseOrderCreate": "Нове Замовлення на Закупівлю", + "purchaseOrderCreate": "New Purchase Order", "@purchaseOrderCreate": {}, - "purchaseOrderEdit": "Редагувати Замовлення на Закупівлю", + "purchaseOrderEdit": "Edit Purchase Order", "@purchaseOrderEdit": {}, - "purchaseOrderSettings": "Налаштування замовлення на закупівлю", + "purchaseOrderSettings": "Purchase order settings", "@purchaseOrderSettings": {}, - "purchaseOrders": "Закупівлі", + "purchaseOrders": "Purchase Orders", "@purchaseOrders": {}, - "purchaseOrderUpdated": "Замовлення на закупівлю оновлено", + "purchaseOrderUpdated": "Purchase order updated", "@purchaseOrderUpdated": {}, - "purchasePrice": "Закупівельна Ціна", + "purchasePrice": "Purchase Price", "@purchasePrice": {}, "quantity": "Кількість", "@quantity": { @@ -740,7 +740,7 @@ }, "quantityAvailable": "Доступна кількість", "@quantityAvailable": {}, - "quantityEmpty": "Кількість не вказана", + "quantityEmpty": "Quantity is empty", "@quantityEmpty": {}, "quantityInvalid": "Некоректна кількість", "@quantityInvalid": {}, @@ -752,13 +752,13 @@ "@queryNoResults": {}, "received": "Отримано", "@received": {}, - "receivedFilterDetail": "Показувати отримані позиції", + "receivedFilterDetail": "Show received items", "@receivedFilterDetail": {}, - "receiveItem": "Прийняти Позицію", + "receiveItem": "Receive Item", "@receiveItem": {}, - "receivedItem": "Отримана Складська Позиція", + "receivedItem": "Received Stock Item", "@receivedItem": {}, - "reference": "Номер документа", + "reference": "Reference", "@reference": {}, "refresh": "Оновити", "@refresh": {}, @@ -766,7 +766,7 @@ "@rotateClockwise": {}, "refreshing": "Оновлення", "@refreshing": {}, - "rejected": "Відхилено", + "rejected": "Rejected", "@rejected": {}, "releaseNotes": "Замітки до випуску", "@releaseNotes": {}, diff --git a/lib/l10n/zh_CN/app_zh_CN.arb b/lib/l10n/zh_CN/app_zh_CN.arb index 26cdce41..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,9 +472,9 @@ "@itemUpdated": {}, "keywords": "关键词", "@keywords": {}, - "labelDriver": "标签打印机", + "labelDriver": "Label Driver", "@labelDriver": {}, - "labelSelectDriver": "选择标签打印机", + "labelSelectDriver": "Select Label Printer Driver", "@labelSelectDriver": {}, "labelPrinting": "打印标签", "@labelPrinting": {}, @@ -514,7 +514,7 @@ "@locationCreate": {}, "locationCreateDetail": "创建新库存地点", "@locationCreateDetail": {}, - "locationDefault": "默认位置", + "locationDefault": "Default Location", "@locationDefault": {}, "locationNotSet": "没有指定仓储位置", "@locationNotSet": {}, diff --git a/lib/preferences.dart b/lib/preferences.dart index 92eda1fe..de7bb0f0 100644 --- a/lib/preferences.dart +++ b/lib/preferences.dart @@ -32,6 +32,7 @@ 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 aa136782..b0919316 100644 --- a/lib/settings/part_settings.dart +++ b/lib/settings/part_settings.dart @@ -13,6 +13,7 @@ class InvenTreePartSettingsWidget extends StatefulWidget { class _InvenTreePartSettingsState extends State { _InvenTreePartSettingsState(); + bool partShowParameters = true; bool partShowBom = true; bool partShowPricing = true; bool stockShowHistory = false; @@ -27,6 +28,10 @@ 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, @@ -63,6 +68,23 @@ 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/attachment_widget.dart b/lib/widget/attachment_widget.dart index 721909d9..b66462f3 100644 --- a/lib/widget/attachment_widget.dart +++ b/lib/widget/attachment_widget.dart @@ -2,13 +2,14 @@ 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"; @@ -22,13 +23,13 @@ import "package:inventree/widget/refreshable_state.dart"; */ class AttachmentWidget extends StatefulWidget { const AttachmentWidget( - this.modelType, + this.attachmentClass, this.modelId, this.imagePrefix, this.hasUploadPermission, ) : super(); - final String modelType; + final InvenTreeAttachment attachmentClass; final int modelId; final bool hasUploadPermission; final String imagePrefix; @@ -53,15 +54,15 @@ class _AttachmentWidgetState extends RefreshableState { IconButton( icon: Icon(TablerIcons.camera), onPressed: () async { - InvenTreeAttachment() - .uploadImage( - widget.modelType, - widget.modelId, - prefix: widget.imagePrefix, - ) - .then((_) { - refresh(context); - }); + widget.attachmentClass.uploadImage( + widget.modelId, + prefix: widget.imagePrefix, + ); + FilePickerDialog.pickImageFromCamera().then((File? file) { + upload(context, file).then((_) { + refresh(context); + }); + }); }, ), IconButton( @@ -82,9 +83,8 @@ class _AttachmentWidgetState extends RefreshableState { showLoadingOverlay(); - final bool result = await InvenTreeAttachment().uploadAttachment( + final bool result = await widget.attachmentClass.uploadAttachment( file, - widget.modelType, widget.modelId, ); @@ -168,24 +168,25 @@ class _AttachmentWidgetState extends RefreshableState { Future request(BuildContext context) async { Map filters = {}; - filters["model_type"] = widget.modelType; - filters["model_id"] = widget.modelId.toString(); + 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(); + } - List _attachments = []; + await widget.attachmentClass.list(filters: filters).then((var results) { + attachments.clear(); - InvenTreeAttachment().list(filters: filters).then((var results) { for (var result in results) { if (result is InvenTreeAttachment) { - _attachments.add(result); + attachments.add(result); } } - - if (mounted) { - setState(() { - attachments = _attachments; - }); - } }); + + setState(() {}); } @override @@ -239,40 +240,3 @@ 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 9a6d233f..5d06e581 100644 --- a/lib/widget/company/company_detail.dart +++ b/lib/widget/company/company_detail.dart @@ -1,8 +1,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/inventree/attachment.dart"; -import "package:inventree/inventree/parameter.dart"; import "package:inventree/l10.dart"; import "package:inventree/api.dart"; @@ -15,7 +13,6 @@ 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"; @@ -40,7 +37,6 @@ class _CompanyDetailState extends RefreshableState { int outstandingPurchaseOrders = 0; int outstandingSalesOrders = 0; - int parameterCount = 0; int attachmentCount = 0; @override @@ -188,25 +184,15 @@ 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) { - if (mounted) { - setState(() { - attachmentCount = value; - }); - } + InvenTreeCompanyAttachment().countAttachments(widget.company.pk).then(( + value, + ) { + if (mounted) { + setState(() { + attachmentCount = value; }); + } + }); } Future editCompany(BuildContext context) async { @@ -407,31 +393,29 @@ class _CompanyDetailState extends RefreshableState { ); } - ListTile? parameterTile = ShowParametersItem( - context, - InvenTreeCompany.MODEL_TYPE, - widget.company.pk, - parameterCount, - widget.company.canEdit, + 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, + ), + ), + ); + }, + ), ); - if (parameterTile != null) { - tiles.add(parameterTile); - } - - 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/company/manufacturer_part_detail.dart b/lib/widget/company/manufacturer_part_detail.dart index 57a7e48f..9cc6bc23 100644 --- a/lib/widget/company/manufacturer_part_detail.dart +++ b/lib/widget/company/manufacturer_part_detail.dart @@ -1,8 +1,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/inventree/attachment.dart"; -import "package:inventree/inventree/parameter.dart"; import "package:inventree/l10.dart"; import "package:inventree/api.dart"; @@ -10,8 +8,6 @@ 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"; @@ -35,9 +31,6 @@ class _ManufacturerPartDisplayState extends RefreshableState { _ManufacturerPartDisplayState(); - int parameterCount = 0; - int attachmentCount = 0; - @override String getAppBarTitle() => L10().manufacturerPart; @@ -49,34 +42,7 @@ 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 { @@ -125,6 +91,11 @@ class _ManufacturerPartDisplayState List getTiles(BuildContext context) { List tiles = []; + if (loading) { + tiles.add(progressIndicator()); + return tiles; + } + // Internal Part tiles.add( ListTile( @@ -203,31 +174,6 @@ 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 ed607483..77e29ab4 100644 --- a/lib/widget/company/supplier_part_detail.dart +++ b/lib/widget/company/supplier_part_detail.dart @@ -2,9 +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/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"; @@ -14,7 +11,6 @@ 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"; @@ -39,9 +35,6 @@ class _SupplierPartDisplayState extends RefreshableState { _SupplierPartDisplayState(); - int parameterCount = 0; - int attachmentCount = 0; - @override String getAppBarTitle() => L10().supplierPart; @@ -104,34 +97,7 @@ 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; - }); - } - }); } /* @@ -320,31 +286,6 @@ 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 d309a4b3..4201cd36 100644 --- a/lib/widget/order/purchase_order_detail.dart +++ b/lib/widget/order/purchase_order_detail.dart @@ -7,8 +7,6 @@ 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/inventree/parameter.dart"; import "package:inventree/l10.dart"; import "package:inventree/inventree/model.dart"; @@ -23,7 +21,6 @@ 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"; @@ -53,7 +50,6 @@ class _PurchaseOrderDetailState int completedLines = 0; int attachmentCount = 0; - int parameterCount = 0; bool showCameraShortcut = true; bool supportProjectCodes = false; @@ -178,12 +174,8 @@ class _PurchaseOrderDetailState /// Upload an image against the current PurchaseOrder Future _uploadImage(BuildContext context) async { - InvenTreeAttachment() - .uploadImage( - InvenTreePurchaseOrder.MODEL_TYPE, - widget.order.pk, - prefix: widget.order.reference, - ) + InvenTreePurchaseOrderAttachment() + .uploadImage(widget.order.pk, prefix: widget.order.reference) .then((result) => refresh(context)); } @@ -303,25 +295,15 @@ 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) { - if (mounted) { - setState(() { - attachmentCount = value; - }); - } + InvenTreePurchaseOrderAttachment().countAttachments(widget.order.pk).then(( + int value, + ) { + if (mounted) { + setState(() { + attachmentCount = value; }); + } + }); if (api.supportsPurchaseOrderDestination && widget.order.destinationId > 0) { @@ -583,31 +565,30 @@ class _PurchaseOrderDetailState ), ); - ListTile? parameterTile = ShowParametersItem( - context, - InvenTreePurchaseOrder.MODEL_TYPE, - widget.order.pk, - parameterCount, - widget.order.canEdit, + // 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, + ), + ), + ); + }, + ), ); - if (parameterTile != null) { - tiles.add(parameterTile); - } - - 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 79a3620b..ec18561c 100644 --- a/lib/widget/order/sales_order_detail.dart +++ b/lib/widget/order/sales_order_detail.dart @@ -3,16 +3,13 @@ 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/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"; @@ -45,7 +42,6 @@ class _SalesOrderDetailState extends RefreshableState { bool showCameraShortcut = true; bool supportsProjectCodes = false; int attachmentCount = 0; - int parameterCount = 0; @override String getAppBarTitle() { @@ -112,12 +108,8 @@ class _SalesOrderDetailState extends RefreshableState { /// Upload an image for this order Future _uploadImage(BuildContext context) async { - InvenTreeAttachment() - .uploadImage( - InvenTreeSalesOrder.MODEL_TYPE, - widget.order.pk, - prefix: widget.order.reference, - ) + InvenTreeSalesOrderAttachment() + .uploadImage(widget.order.pk, prefix: widget.order.reference) .then((result) => refresh(context)); } @@ -274,25 +266,15 @@ 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) { - if (mounted) { - setState(() { - attachmentCount = value; - }); - } + InvenTreeSalesOrderAttachment().countAttachments(widget.order.pk).then(( + int value, + ) { + if (mounted) { + setState(() { + attachmentCount = value; }); + } + }); // Count number of "extra line items" against this order InvenTreeSOExtraLineItem() @@ -510,31 +492,30 @@ class _SalesOrderDetailState extends RefreshableState { ), ); - ListTile? parameterTile = ShowParametersItem( - context, - InvenTreeSalesOrder.MODEL_TYPE, - widget.order.pk, - parameterCount, - widget.order.canEdit, + // 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, + ), + ), + ); + }, + ), ); - if (parameterTile != null) { - tiles.add(parameterTile); - } - - 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 34984dfd..9116fb7f 100644 --- a/lib/widget/order/so_shipment_detail.dart +++ b/lib/widget/order/so_shipment_detail.dart @@ -8,7 +8,6 @@ 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"; @@ -92,11 +91,8 @@ class _SOShipmentDetailWidgetState }); } - InvenTreeAttachment() - .countAttachments( - InvenTreeSalesOrderShipment.MODEL_TYPE, - widget.shipment.pk, - ) + InvenTreeSalesOrderShipmentAttachment() + .countAttachments(widget.shipment.pk) .then((int value) { if (mounted) { setState(() { @@ -108,12 +104,8 @@ class _SOShipmentDetailWidgetState /// Upload an image for this shipment Future _uploadImage(BuildContext context) async { - InvenTreeAttachment() - .uploadImage( - InvenTreeSalesOrderShipment.MODEL_TYPE, - widget.shipment.pk, - prefix: widget.shipment.reference, - ) + InvenTreeSalesOrderShipmentAttachment() + .uploadImage(widget.shipment.pk, prefix: widget.shipment.reference) .then((result) => refresh(context)); } @@ -347,19 +339,30 @@ class _SOShipmentDetailWidgetState ), ); - ListTile? attachmentTile = ShowAttachmentsItem( - context, - InvenTreeSalesOrderShipment.MODEL_TYPE, - widget.shipment.pk, - widget.shipment.reference, - attachmentCount, - widget.shipment.canEdit, + // 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, + ), + ), + ); + }, + ), ); - 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 73a299f8..98cf1737 100644 --- a/lib/widget/part/part_detail.dart +++ b/lib/widget/part/part_detail.dart @@ -4,8 +4,6 @@ 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"; @@ -17,10 +15,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"; @@ -51,11 +49,13 @@ 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; @@ -152,6 +152,10 @@ 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, @@ -208,30 +212,13 @@ class _PartDisplayState extends RefreshableState { } // Request the number of attachments - 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; - }); - } - }); - } + InvenTreePartAttachment().countAttachments(part.pk).then((int value) { + if (mounted) { + setState(() { + attachmentCount = value; + }); + } + }); // If show pricing information? if (showPricing) { @@ -609,31 +596,29 @@ class _PartDisplayState extends RefreshableState { ), ); - ListTile? parameterTile = ShowParametersItem( - context, - InvenTreePart.MODEL_TYPE, - part.pk, - parameterCount, - part.canEdit, + 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, + ), + ), + ); + }, + ), ); - if (parameterTile != null) { - tiles.add(parameterTile); - } - - ListTile? attachmentTile = ShowAttachmentsItem( - context, - InvenTreePart.MODEL_TYPE, - part.pk, - L10().part, - attachmentCount, - part.canEdit, - ); - - if (attachmentTile != null) { - tiles.add(attachmentTile); - } - return tiles; } @@ -727,6 +712,10 @@ 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; } @@ -739,6 +728,11 @@ class _PartDisplayState extends RefreshableState { ), PaginatedStockItemList({"part": part.pk.toString()}), ]; + + if (showParameters) { + tabs.add(PaginatedParameterList({"part": part.pk.toString()})); + } + return tabs; } } diff --git a/lib/widget/parameter_widget.dart b/lib/widget/part/part_parameter_widget.dart similarity index 58% rename from lib/widget/parameter_widget.dart rename to lib/widget/part/part_parameter_widget.dart index 07a38fcd..c4df1890 100644 --- a/lib/widget/parameter_widget.dart +++ b/lib/widget/part/part_parameter_widget.dart @@ -1,12 +1,8 @@ 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/widget/link_icon.dart"; +import "package:inventree/inventree/part.dart"; import "package:inventree/widget/paginator.dart"; import "package:inventree/widget/progress.dart"; import "package:inventree/widget/refreshable_state.dart"; @@ -14,18 +10,16 @@ import "package:inventree/widget/refreshable_state.dart"; /* * Widget for displaying a list of parameters associated with a given Part instance */ -class ParameterWidget extends StatefulWidget { - const ParameterWidget(this.modelType, this.modelId, this.editable) : super(); +class PartParameterWidget extends StatefulWidget { + const PartParameterWidget(this.part); - final String modelType; - final int modelId; - final bool editable; + final InvenTreePart part; @override _ParameterWidgetState createState() => _ParameterWidgetState(); } -class _ParameterWidgetState extends RefreshableState { +class _ParameterWidgetState extends RefreshableState { _ParameterWidgetState(); @override @@ -40,16 +34,9 @@ class _ParameterWidgetState extends RefreshableState { @override Widget getBody(BuildContext context) { - Map filters = { - "model_type": widget.modelType, - "model_id": widget.modelId.toString(), - }; + Map filters = {"part": widget.part.pk.toString()}; - return Column( - children: [ - Expanded(child: PaginatedParameterList(filters, widget.editable)), - ], - ); + return Column(children: [Expanded(child: PaginatedParameterList(filters))]); } } @@ -57,11 +44,9 @@ class _ParameterWidgetState extends RefreshableState { * Widget for displaying a paginated list of Part parameters */ class PaginatedParameterList extends PaginatedSearchWidget { - const PaginatedParameterList(Map filters, this.editable) + const PaginatedParameterList(Map filters) : super(filters: filters); - final bool editable; - @override String get searchTitle => L10().parameters; @@ -90,7 +75,7 @@ class _PaginatedParameterState int offset, Map params, ) async { - final page = await InvenTreeParameter().listPaginated( + final page = await InvenTreePartParameter().listPaginated( limit, offset, filters: params, @@ -99,7 +84,7 @@ class _PaginatedParameterState return page; } - Future editParameter(InvenTreeParameter parameter) async { + Future editParameter(InvenTreePartParameter parameter) async { // Checkbox values are handled separately if (parameter.is_checkbox) { return; @@ -116,7 +101,7 @@ class _PaginatedParameterState @override Widget buildItem(BuildContext context, InvenTreeModel model) { - InvenTreeParameter parameter = model as InvenTreeParameter; + InvenTreePartParameter parameter = model as InvenTreePartParameter; String title = parameter.name; @@ -131,7 +116,7 @@ class _PaginatedParameterState ? Switch( value: parameter.as_bool, onChanged: (bool value) { - if (widget.editable) { + if (parameter.canEdit) { showLoadingOverlay(); parameter.update(values: {"data": value.toString()}).then(( value, @@ -146,47 +131,10 @@ class _PaginatedParameterState onTap: parameter.is_checkbox ? null : () async { - if (widget.editable) { + if (parameter.canEdit) { 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/stock/stock_detail.dart b/lib/widget/stock/stock_detail.dart index 282a9627..db295cac 100644 --- a/lib/widget/stock/stock_detail.dart +++ b/lib/widget/stock/stock_detail.dart @@ -7,7 +7,6 @@ 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"; @@ -256,15 +255,15 @@ class _StockItemDisplayState extends RefreshableState { } // Request the number of attachments - InvenTreeAttachment() - .countAttachments(InvenTreeStockItem.MODEL_TYPE, widget.item.pk) - .then((int value) { - if (mounted) { - setState(() { - attachmentCount = value; - }); - } + InvenTreeStockItemAttachment().countAttachments(widget.item.pk).then(( + int value, + ) { + if (mounted) { + setState(() { + attachmentCount = value; }); + } + }); // Request SalesOrder information if (widget.item.hasSalesOrder) { @@ -838,19 +837,29 @@ class _StockItemDisplayState extends RefreshableState { ), ); - ListTile? attachmentTile = ShowAttachmentsItem( - context, - InvenTreeStockItem.MODEL_TYPE, - widget.item.pk, - L10().stockItem, - attachmentCount, - widget.item.canEdit, + 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, + ), + ), + ); + }, + ), ); - if (attachmentTile != null) { - tiles.add(attachmentTile); - } - return tiles; } } diff --git a/update-flutter-nix.sh b/update-flutter-nix.sh deleted file mode 100644 index 5aad34d3..00000000 --- a/update-flutter-nix.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/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)."