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.0 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' => 'زیادکردن یان کەمکردنی جەرد.',
'allow_alt_description' => 'ڕێگە بدە بە دەربارەی جێگرەوە',
'amount_entry' => 'داخڵکردنی بڕی پارە',
'bulk_edit' => 'دەستکاریکردنی بە کۆمەڵ',
'buy_price_required' => 'نرخی کڕین خانەیەکی پێویستە.',
'cannot_be_deleted' => 'نەتوانرا بابەتی هەڵبژێردراو بسڕدرێتەوە، یەکێک یان زیاتر لە بابەتە هەڵبژێردراوەکان فرۆشتنیان هەیە.',
'cannot_find_item' => 'ئایتم نەدۆزرایەوە.',
'categories' => '',
'category' => 'پۆلێن',
'category_new' => '',
'category_required' => 'پۆل خانەیەکی پێویستە.',
'change_all_to_allow_alt_desc' => 'ڕێگە بە وەسفێکی جێگرەوە بدە بۆ هەمووان.',
'change_all_to_not_allow_allow_desc' => 'ڕێگە مەدە بە وەسفی جێگرەوە بۆ هەمووان.',
'change_all_to_serialized' => 'هەمووی بگۆڕە بۆ بەزنجیرەکراو',
'change_all_to_unserialized' => 'هەمووی بگۆڕە بۆ بەزنجیرەنەکراوە',
'change_image' => 'وێنەکە بگۆڕە',
'confirm_bulk_edit' => 'ئایا دڵنیای کە دەتەوێت دەستکاری ئایتم(ەکان)ی هەڵبژێردراو بکەیت؟',
'confirm_bulk_edit_wipe_taxes' => 'هەموو زانیارییەکانی باجی ئایتم شوێنیان دەگیرێتەوە.',
'confirm_delete' => 'ئایا دڵنیای کە دەتەوێت ئایتم(ەکان)ی هەڵبژێردراو بسڕیتەوە؟',
'confirm_restore' => 'ئایا دڵنیای کە دەتەوێت ئایتم(ەکان)ی هەڵبژێردراو بگەڕێنیتەوە؟',
'cost_price' => 'نرخی جوملە',
'cost_price_number' => 'نرخی جوملە دەبێت ژمارە بێت.',
'cost_price_required' => 'نرخی جوملە خانەیەکی پێویستە.',
'count' => 'جەرد نوێ بکەوە',
'csv_import_failed' => 'هاوردەکردنی CSV سەرکەوتوو نەبوو',
'csv_import_invalid_location' => '',
'csv_import_nodata_wrongformat' => 'پەڕگەی CSV بارکراو هیچ داتایەکی نییە یان بە هەڵە فۆرمات کراوە.',
'csv_import_partially_failed' => '{0} شکستی هاوردەکردنی بابەتی لەسەر هێڵەکان هەبوو: {1}. هیچ ڕیزێک هاوردە نەکرا.',
'csv_import_success' => 'بابەتی هاوردەکردنی CSV سەرکەوتوو بوو.',
'current_quantity' => 'چەندێتی ئێستە',
'default_pack_name' => 'هەریەک',
'description' => 'دەربارە',
'details_count' => 'وردەکاری ژمارەی جەرد',
'do_nothing' => 'هیچ مەکە',
'edit' => '',
'edit_fields_you_want_to_update' => 'دەستکاری خانەی دڵخوازت بکە بۆ ئایتمی هەڵبژێردراو.',
'edit_multiple_items' => 'دەسکاریکردنی چەندین ئایتم',
'empty_upc_items' => 'ئایتمی باڕکۆدی بەتاڵ',
'error_adding_updating' => 'لە زیادکردنی/نوێکردنەوەی ئایتم هەڵە هەیە',
'error_updating_multiple' => 'لە نوێکردنەوەی ئایتم هەڵە هەیە',
'generate_barcodes' => 'دروستکردنی بارکۆدەکان',
'hsn_code' => 'ناونانی سیستەمی هاوسەنگکراو',
'image' => 'وێنە',
'import_items_csv' => 'هاوردەکردنی ئایتم لە CSV',
'info_provided_by' => 'زانیاری دراوە لەلایەن',
'inventory' => 'جەرد',
'inventory_CSV_import_quantity' => 'چەندێتی هاوردەکراو لە CSV',
'inventory_comments' => 'کۆمێنتەکان',
'inventory_data_tracking' => 'بەدواداچوون بۆ داتاکانی جەرد',
'inventory_date' => 'بەرورار',
'inventory_employee' => 'فەرمانبەر',
'inventory_in_out_quantity' => 'چەندێتی هاتوو/ڕۆیشتوو',
'inventory_remarks' => 'تێبینییەکان',
'is_deleted' => 'سڕاوەتەوە',
'is_printed' => '',
'is_serialized' => 'ئایتم ژمارەی زنجیرەیی هەیە',
'item' => 'ئایتم',
'item_id' => '',
'item_number' => 'باڕکۆد',
'item_number_duplicate' => 'ژمارەی ئایتم پێشتر لە داتابەیسدا ئامادەبووە.',
'item_number_invalid' => 'ژمارەی ئایتم پیتی ڕێگەپێنەدراوی تێدایە.',
'kit' => 'کیت',
'location' => 'شوێن',
'low_inventory_items' => 'ئایتمەکانی لە کۆگادا نەماون',
'low_sell_item' => 'ئایتمی فرۆش کەم',
'manually_editing_of_quantity' => 'دەستکاریکردنی دەستی چەندێتی',
'markup' => '',
'name' => 'ناوی ئایتم',
'name_required' => 'ناوی ئایتم خانەیەکی پێویستە.',
'new' => 'ئایتمی نوێ',
'no_description_items' => 'ئایتمەکانی دەربارە(وەسف)یان نییە',
'no_items_to_display' => 'هیچ ئایتمێک نییە بۆ نیشاندان.',
'none' => 'هیچیان',
'none_selected' => 'تۆ هیچ ئایتمێکت هەڵنەبژاردووە بۆ دەستکاریکردن',
'nonstock' => 'لە کۆگادانەنراو',
'number_information' => 'ژمارەی ئایتم',
'number_required' => 'خانەی باڕکۆد پێویستە.',
'one_or_multiple' => 'ئایتم(ەکان)',
'pack_name' => 'ناوی پاکەت',
'qty_per_pack' => 'چەندێتی(ژمارە-بڕ) بۆ هەر پاکەتێک',
'quantity' => 'بڕ',
'quantity_number' => 'چەندێتی دەبێت ژمارە بێت.',
'quantity_required' => 'چەندێتی خانەیەکی پێویستە.',
'receiving_quantity' => 'وەرگرتنی چەندێتی',
'remove_image' => 'لابردنی وێنە',
'reorder_level' => 'ئاست ڕێکخستنەوە',
'reorder_level_number' => 'ئاست ڕێکخستنەوە دەبێت ژمارە بێت.',
'reorder_level_required' => 'ئاست ڕێکخستنەوە خانەیەکی پێویستە.',
'retrive_item_info' => 'گەڕاندنەوەی زانیاری ئایتم',
'sales_tax_1' => 'باجی فرۆشتن',
'sales_tax_2' => 'باجی فرۆشتن ٢',
'search_attributes' => 'تایبەتمەندی گەڕان',
'select_image' => 'وێنە هەڵبژێرە',
'serialized_items' => 'ئایتمە بەزنجیرەکراوەکان',
'standard' => 'ستاندارد',
'stock' => 'کۆگا',
'stock_location' => 'شوێنی کۆگا',
'stock_type' => 'جۆری کۆگا',
'successful_adding' => 'بەسەرکەوتوویی ئایتمت زیادکردوە',
'successful_bulk_edit' => 'بەسەرکەوتوویی ئایتم(ەکان)ی هەڵبژێردراوت نوێ کردەوە',
'successful_deleted' => 'بەسەرکەوتووی سڕیتەوە',
'successful_updating' => 'بەسەرکەوتووی ئایتمت نوێ کردەوە',
'supplier' => 'دابینکار',
'tax_1' => 'باج ١',
'tax_2' => 'باج ٢',
'tax_3' => '',
'tax_category' => 'پۆلێنی باج',
'tax_name_invalid' => 'ناوی باج پیتی ڕێگە پێنەدراوی تێدایە.',
'tax_percent' => '',
'tax_percent_number' => 'ڕێژەی سەدی باج دەبێت بەهایەکی ژمارەیی بێت',
'tax_percent_required' => 'ڕێژەی سەدی باج خانەیەکی پێویستە.',
'tax_percents' => 'ڕێژەی سەدی(یەکان)ی باج',
'temp' => 'کاتیی',
'type' => 'جۆری ئایتم',
'unit_price' => 'نرخی وردە فرۆشی',
'unit_price_number' => 'نرخی یەکە دەبێت ژمارە بێت.',
'unit_price_required' => 'نرخی تاکفرۆشی خانەیەکی پێویستە.',
'upc_database' => 'داتابەیسی باڕکۆد',
'update' => 'نوێکردنەوەی ئایتم',
'use_inventory_menu' => 'لیستەی جەرد بەکاربهێنە',
];