Files
objecttothis 6db3dde491 Bugfix tax names (#4677)
bugfix(items, validation): reject unsafe tax names and fix payments temp table collision

- Add unicode_alpha_numeric_punct rule (OSPOSRules) to allow accented/CJK
  chars in text fields while blocking HTML-unsafe chars (<, >) as
  defense-in-depth against injection
- Items controller: extract validateItemFields/validateBulkUpdateFields,
  validate tax_names on save and bulk update using new rule; add shared
  validateFields helper in Secure_Controller to DRY up validation +
  JSON error response
- Escape tax_group output in sales/quote.php and receipt_email.php views
  to harden output encoding at render time
- Rename sales_payments_temp -> sales_report_payments_temp (Summary_report)
  and -> sales_search_payments_temp (Sale model) to avoid name collision
  between concurrently-created temp tables
- AGENTS.md: document alignment rule for => columns when inserting new
  language keys

Tests:
- Add ItemsControllerTest covering postSave/bulkupdate tax_names validation
- Reject <, > in tax_names on /items/save and /items/bulkupdate
- Verify unicode and apostrophe-containing tax names are accepted
- Cover CSV import helpers: header generation (basic, multiple locations,
  attributes), stock-location/attribute header builders, get_csv_file
  parsing (plain, BOM-prefixed, multi-row)
- Validate required-header detection for import templates
- Remove outdated tax name test from SalesControllerTest
- Simplify Database class references in SalesControllerTest

i18n:
- Add tax_name_invalid translation to Items.php for 20+ locales, inserted
  alphabetically after tax_category in each file
- Normalize quote style in ar-EG/Items.php to single quotes
- Add ka/Items.php Georgian locale scaffold

Signed-off-by: objecttothis <17935339+objecttothis@users.noreply.github.com>
2026-09-01 10:59:29 +04:00

125 lines
8.6 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
return [
'add_minus' => 'İnventar + Topla və ya - Çıx.',
'allow_alt_description' => 'Alternativ təsvirə icazə verin',
'amount_entry' => 'Məbləğ Əlavəsi',
'bulk_edit' => 'Kütləvi Redaktə',
'buy_price_required' => 'Alış qiyməti tələb olunan sahədir.',
'cannot_be_deleted' => 'Seçilmiş Mal (lar) silmək mükün deyil, bir və ya birdən çox Mallarda Satışlar var.',
'cannot_find_item' => 'Mal Tapılmadı.',
'categories' => '',
'category' => 'Bolmə',
'category_new' => '',
'category_required' => 'Bölmə sahəsi boş qala bilməz.',
'change_all_to_allow_alt_desc' => 'Hamısı üçün Alternativ Təsvirə İcazə Verin.',
'change_all_to_not_allow_allow_desc' => 'Hamısı üçün Alternativ Təsvirə İcazə Verməyin.',
'change_all_to_serialized' => 'Hamısını Seriyalaşdırılmışa görə dəyişin',
'change_all_to_unserialized' => 'Qeyri Seriyalara görə dəyiş',
'change_image' => 'Şəkili Dəyiş',
'confirm_bulk_edit' => 'Siz əminsinizmi ki işarələnmiş butun malları redaktə etmək istəyirsiniz?',
'confirm_bulk_edit_wipe_taxes' => 'Bütün Məhsul Vergisi məlumatları dəyişdiriləcək.',
'confirm_delete' => 'Seçilmiş element(ləri) silmək istədiyinizə əminsiniz?',
'confirm_restore' => 'Seçilmiş element (lər) bərpa etmək istədiyinizə əminsinizmi?',
'cost_price' => 'Topdan Satış qiyməti',
'cost_price_number' => 'Topdansatış qiyməti rəqəm olmalıdır.',
'cost_price_required' => 'Topdan satiış - doldurulması vacib sahə.',
'count' => 'inventorun yenilənməsi',
'csv_import_failed' => 'səhv csv import',
'csv_import_invalid_location' => '',
'csv_import_nodata_wrongformat' => 'Yüklənmiş faylda məlumat yoxdur və ya düzgün formatlanmır.',
'csv_import_partially_failed' => 'Xətlərdə {0} element idxalı uğursuzluq (lar) var: {1}. Heç bir sıra idxal edilmədi.',
'csv_import_success' => 'Malların İdxalı Uğurla Həyata Keçdi.',
'current_quantity' => 'indiki say',
'default_pack_name' => 'Hər biri',
'description' => 'təsvir',
'details_count' => 'detallı inventor sayı',
'do_nothing' => 'heç nə etməmək',
'edit' => '',
'edit_fields_you_want_to_update' => 'Seçilmiş məhsullar üçün tələb olunan sahələri redaktə edin.',
'edit_multiple_items' => 'bir neçə malın redaktəsi',
'empty_upc_items' => 'Boş Barkod Malları',
'error_adding_updating' => 'mal əlavə etməkdə və ya yeniləməkdə səhv var',
'error_updating_multiple' => 'malların yenilənməsində səhv var',
'generate_barcodes' => 'şifrə yarat',
'hsn_code' => 'Harmonize Sistem Nomenklaturası',
'image' => 'Avatar',
'import_items_csv' => 'CSVdən Malları İdxal Et',
'info_provided_by' => 'Məlumat təqdim olundu',
'inventory' => 'inventor',
'inventory_CSV_import_quantity' => 'Miqdarı CSV-dən idxal olunur',
'inventory_comments' => 'komentariyalar',
'inventory_data_tracking' => 'İnventarlaşdırma Üçün Məlumat İzləmə',
'inventory_date' => 'Tarix',
'inventory_employee' => 'Əmakdaş',
'inventory_in_out_quantity' => 'Daxili və Xarici Say',
'inventory_remarks' => 'Qeydlər',
'is_deleted' => 'Silindi',
'is_printed' => '',
'is_serialized' => 'Malın Seriya Nömrəsi var',
'item' => 'Mal',
'item_id' => '',
'item_number' => 'Barkod',
'item_number_duplicate' => 'Malın Nömrəsi artiq Məlumat bazasında var.',
'item_number_invalid' => 'Malın Nömrəsində icazə verilməyən simvollar var.',
'kit' => 'Dəst',
'location' => 'Yer',
'low_inventory_items' => 'Bitmış Mallar',
'low_sell_item' => 'Malların aşağı qiy. satışı',
'manually_editing_of_quantity' => 'Sayı Əl ilə Redeaktə Etmək',
'markup' => '',
'name' => 'Malın Adı',
'name_required' => 'Malın adı olan sahə boş qala bilməz.',
'new' => 'Yeni Mal',
'no_description_items' => 'Mallar haqqında Təsvir Yoxdur',
'no_items_to_display' => 'Mallar Göstərilmir.',
'none' => 'Heçnə',
'none_selected' => 'Siz redaktə etmək üçün hər hansı bir mal seçməmisiniz',
'nonstock' => 'Əldə Olmayan',
'number_information' => 'Malın Nömrəsi',
'number_required' => 'Barkod tələb olunan sahədir.',
'one_or_multiple' => 'Mal (lar)',
'pack_name' => 'Paket Adı',
'qty_per_pack' => 'Paketin miqdarı',
'quantity' => 'Sayı',
'quantity_number' => 'Miqdarı mütləq rəqəmlə olmalıdır.',
'quantity_required' => 'Miqyas tələb olunan sahədir.',
'receiving_quantity' => 'Qəbul Olunan Miqdar',
'remove_image' => 'Şəkili Sil',
'reorder_level' => 'Səviyyani yenidən düzəlt',
'reorder_level_number' => 'Yenidən sıralama səviyyəsi rəqəmlə olmalıdır.',
'reorder_level_required' => 'Düzəliş Səviyyəsi zəruri bir sahədir.',
'retrive_item_info' => 'Mal Haqqında Məlumat',
'sales_tax_1' => 'Satış Vergisi',
'sales_tax_2' => 'Satış Vergisi 2',
'search_attributes' => 'Atributları Axtar',
'select_image' => 'Şəkil Seç',
'serialized_items' => 'Seriyalı Mallar',
'standard' => 'Standart',
'stock' => 'Ehtiyyat',
'stock_location' => 'Ehtiyyatın Yerləşdiyi Yer',
'stock_type' => 'Ehtiyyatda olanın Növü',
'successful_adding' => 'Siz uğurla malı əlavə etdiniz',
'successful_bulk_edit' => 'Siz uğurla bütun mallari yenilədiniz',
'successful_deleted' => 'Siz uğurla sildiniz',
'successful_updating' => 'Siz uğurla malı yenilədiniz',
'supplier' => 'Təchizatcı',
'tax_1' => 'Vergi 1',
'tax_2' => 'Vergi 2',
'tax_3' => '',
'tax_category' => 'Vergi Bolməsi',
'tax_name_invalid' => 'Vergi adında icazə verilməyən simvollar var.',
'tax_percent' => 'Vergi Faizi',
'tax_percent_number' => 'Vergi Faizi rəqəmli dəyər vahidi olmalıdir',
'tax_percent_required' => 'Vergi Faizi tələb olunan sahədir.',
'tax_percents' => 'Vergi Faiz(lər) i',
'temp' => 'Müvəqqəti',
'type' => 'Malın Növü',
'unit_price' => 'Pərakəndə Satış',
'unit_price_number' => 'Vahid qiyməti rəqəmlə olmalıdır.',
'unit_price_required' => 'Pərakəndə qiymət - vacib sahədir.',
'upc_database' => 'Barkod Məlumat Bazası',
'update' => 'Malı Yenilə',
'use_inventory_menu' => 'İnvertizasiya Menyusundan İstifadə Et',
];