Files
opensourcepos/app/Language/nl-BE/Config.php
Ollama 8da4aff262 fix(security): prevent command injection in sendmail path configuration
Add validation for the mailpath POST parameter to prevent command injection
attacks. The path is validated to only allow alphanumeric characters,
underscores, dashes, forward slashes, and dots.

- Required mailpath when protocol is "sendmail"
- Validates format for all non-empty mailpath values
- Blocks common injection vectors: ; | & ` $() spaces newlines
- Added mailpath_invalid translation to all 43 language files
- Simplified validation logic to avoid redundant conditions

Files changed:
- app/Controllers/Config.php: Add regex validation with protocol check
- app/Language/*/Config.php: Add mailpath_invalid error message (43 languages)
- tests/Controllers/ConfigTest.php: Unit tests for validation
2026-04-06 18:37:07 +00:00

333 lines
25 KiB
PHP

<?php
return [
"address" => "Adres",
"address_required" => "Het adres van het bedrijf moet ingevuld worden.",
"all_set" => "All permissies zijn correct ingesteld!",
"allow_duplicate_barcodes" => "Sta gedupliceerde barcodes toe",
"apostrophe" => "apostrof",
"backup_button" => "Backup",
"backup_database" => "Backup Database",
"barcode" => "Streepjescode",
"barcode_company" => "Bedrijfsnaam",
"barcode_configuration" => "Barcode Configuratie",
"barcode_content" => "Inhoud Barcode",
"barcode_first_row" => "Rij 1",
"barcode_font" => "Lettertype",
"barcode_formats" => "Barcode Formaat",
"barcode_generate_if_empty" => "Genereer indien leeg.",
"barcode_height" => "Hoogte (px)",
"barcode_id" => "Product id/naam",
"barcode_info" => "Barcode instellingen",
"barcode_layout" => "Streepjescode-indeling",
"barcode_name" => "Productnaam",
"barcode_number" => "UPC/EAN/ISBN",
"barcode_number_in_row" => "Aantal per rij",
"barcode_page_cellspacing" => "Toon cellspatiëring.",
"barcode_page_width" => "Toon paginabreedte",
"barcode_price" => "Prijs",
"barcode_second_row" => "Rij 2",
"barcode_third_row" => "Rij 3",
"barcode_tooltip" => "Waarschuwing: Deze functie kan ertoe leiden dat er dubbele artikels worden geïmporteerd of aangemaakt. Niet gebruiken als u geen dubbele streepjescodes wilt.",
"barcode_type" => "Type Barcode",
"barcode_width" => "Breedte (px)",
"bottom" => "Bodem",
"cash_button" => "",
"cash_button_1" => "",
"cash_button_2" => "",
"cash_button_3" => "",
"cash_button_4" => "",
"cash_button_5" => "",
"cash_button_6" => "",
"cash_decimals" => "Cash precisie",
"cash_decimals_tooltip" => "Als cash en currency precies niet hetzelfde zijn dan zal er geena afronding gebeuren.",
"cash_rounding" => "Cash Afronding",
"category_dropdown" => "Toon categorie als dropdown",
"center" => "Midden",
"change_apperance_tooltip" => "",
"comma" => "komma",
"company" => "Bedrijfsnaam",
"company_avatar" => "",
"company_change_image" => "Selecteer Afbeelding",
"company_logo" => "Logo",
"company_remove_image" => "Verwijder Afbeelding",
"company_required" => "De bedrijfsnaam moet ingevuld worden",
"company_select_image" => "Selecteer Afbeelding",
"company_website_url" => "De website van het bedrijf is geen geldige URL (http://...).",
"country_codes" => "Land Codes",
"country_codes_tooltip" => "Komma's gescheiden lijst van landencodes voor het op naam opzoeken van het adres opzoeken.",
"currency_code" => "Munteenheid",
"currency_decimals" => "Valuta decimalen",
"currency_symbol" => "Valuta",
"current_employee_only" => "",
"customer_reward" => "Punten",
"customer_reward_duplicate" => "Spaarpunten moeten uniek zijn.",
"customer_reward_enable" => "Activeer Spaarpunten",
"customer_reward_invalid_chars" => "Spaarpunten kunnen geen '_' bevatten",
"customer_reward_required" => "Spaarpunten is een verplicht veld",
"customer_sales_tax_support" => "Klant fiscale support",
"date_or_time_format" => "Datum en tijd filter",
"datetimeformat" => "Datum en tijd formaat",
"decimal_point" => "Decimale punt",
"default_barcode_font_size_number" => "De barcode font grootte moet een getal zijn.",
"default_barcode_font_size_required" => "De barcode font grootte is een verplicht veld.",
"default_barcode_height_number" => "De barcode grootte moet een getal zijn.",
"default_barcode_height_required" => "De barcode grootte is een verplicht veld.",
"default_barcode_num_in_row_number" => "De barcode nummering moet een getal zijn.",
"default_barcode_num_in_row_required" => "De barcode nummering is een verplicht veld.",
"default_barcode_page_cellspacing_number" => "De barcode cellspatiëring moet een getal zijn.",
"default_barcode_page_cellspacing_required" => "De barcode pagina spatiëring is een verplicht veld.",
"default_barcode_page_width_number" => "Standaardbreedte van de streepjescodepagina moet een getal zijn.",
"default_barcode_page_width_required" => "De barcode breedte is een verplicht veld.",
"default_barcode_width_number" => "De breedte van de barcode moet een getal zijn.",
"default_barcode_width_required" => "De breedte van de barcode is een verplicht veld.",
"default_item_columns" => "Standaard Zichtbaarheid Kolommen",
"default_origin_tax_code" => "Standaard VAT code",
"default_receivings_discount" => "Standaard Korting Orders",
"default_receivings_discount_number" => "De korting moet een getal zijn.",
"default_receivings_discount_required" => "De korting is een verplicht veld.",
"default_sales_discount" => "Standaard Korting Verkoop",
"default_sales_discount_number" => "De korting moet een getal zijn.",
"default_sales_discount_required" => "De korting is een verplicht veld.",
"default_tax_category" => "Standaard Tax Categorie",
"default_tax_code" => "Standaard Tax Code",
"default_tax_jurisdiction" => "Standaard Tax District",
"default_tax_name_number" => "Standaard VAT naam moet een string zijn.",
"default_tax_name_required" => "De naam van de VAT moet ingevuld worden.",
"default_tax_rate" => "Standaard VAT %",
"default_tax_rate_1" => "VAT 1 %",
"default_tax_rate_2" => "VAT 2 %",
"default_tax_rate_3" => "",
"default_tax_rate_number" => "Het percentage VAT moet een nummer zijn.",
"default_tax_rate_required" => "Het percentage VAT is een verplicht veld.",
"derive_sale_quantity" => "Laat Verkoop Afgeleide Hoeveelheid toe",
"derive_sale_quantity_tooltip" => "Indien aangevinkt zal er een nieuw item type voorzien worden om items te ordenen",
"dinner_table" => "Tafel",
"dinner_table_duplicate" => "Tafel moet uniek zijn.",
"dinner_table_enable" => "Activeer Restomode",
"dinner_table_invalid_chars" => "Tafel Naam kan geen '_' bevatten.",
"dinner_table_required" => "Tafel is een verplicht veld.",
"dot" => "punt",
"email" => "Email",
"email_configuration" => "Email Configuration",
"email_mailpath" => "Pad naar Sendmail",
"email_protocol" => "Protocol",
"email_receipt_check_behaviour" => "Email Ticket",
"email_receipt_check_behaviour_always" => "Altijd aan",
"email_receipt_check_behaviour_last" => "Onthoud de laatste selectie",
"email_receipt_check_behaviour_never" => "Altijd uitgetikt",
"email_smtp_crypto" => "SMTP Encryptie",
"email_smtp_host" => "SMTP Server",
"email_smtp_pass" => "SMTP Wachtwoord",
"email_smtp_port" => "SMTP Poort",
"email_smtp_timeout" => "SMTP Time-out (s)",
"email_smtp_user" => "SMTP Gebruikersnaam",
"enable_avatar" => "",
"enable_avatar_tooltip" => "",
"enable_dropdown_tooltip" => "",
"enable_new_look" => "",
"enable_right_bar" => "",
"enable_right_bar_tooltip" => "",
"enforce_privacy" => "Vereis privacy",
"enforce_privacy_tooltip" => "Bescherm klanten hun privacy door data obfuscatie toe te passen in geval van verwijdering",
"fax" => "Fax",
"file_perm" => "Er zijn problemen met de bestandsrechten, herstel ze en herlaad deze pagina.",
"financial_year" => "Start boekjaar",
"financial_year_apr" => "Eerste april",
"financial_year_aug" => "Eerste augustus",
"financial_year_dec" => "Eerste december",
"financial_year_feb" => "Eerste februari",
"financial_year_jan" => "Eerste januari",
"financial_year_jul" => "Eerste juli",
"financial_year_jun" => "Eerste juni",
"financial_year_mar" => "Eerste maart",
"financial_year_may" => "Eerste mei",
"financial_year_nov" => "Eerste november",
"financial_year_oct" => "Eerste oktober",
"financial_year_sep" => "Eerste september",
"floating_labels" => "Variabele Etiketten",
"gcaptcha_enable" => "Login Pagina reCAPTCHA",
"gcaptcha_secret_key" => "reCAPTCHA sleutel",
"gcaptcha_secret_key_required" => "reCAPTCHA sleutel is een verplicht veld",
"gcaptcha_site_key" => "reCAPTCHA site sleutel",
"gcaptcha_site_key_required" => "reCAPTCHA site sleutel is een verplicht veld",
"gcaptcha_tooltip" => "Bescherm de login pagina met Google reCAPTCHA, klik op het icoon voor een API key pair.",
"general" => "Algemene",
"general_configuration" => "Algemene Instellingen",
"giftcard_number" => "Cadeaubon Nummer",
"giftcard_random" => "Genereer Willekeurig",
"giftcard_series" => "Genereer in volgorde",
"image_allowed_file_types" => "Toegelaten bestandstypes",
"image_max_height_tooltip" => "Maximum toegelaten hoogte voor afbeeldingen in pixels (px).",
"image_max_size_tooltip" => "Maximum toegelaten bestandsgrootte voor afbeeldingen in kilobytes (kb).",
"image_max_width_tooltip" => "Maximum toegelaten breedte voor afbeeldingen in pixels (px).",
"image_restrictions" => "Upload Instellingen voor Afbeeldingen",
"include_hsn" => "Ondersteuning voor HSN Codes",
"info" => "Instellingen",
"info_configuration" => "Instellingen",
"input_groups" => "Invoer Groepen",
"integrations" => "Integraties",
"integrations_configuration" => "Integraties",
"invoice" => "Factuur",
"invoice_configuration" => "Print Instellingen",
"invoice_default_comments" => "Factuur Mededeling",
"invoice_email_message" => "Factuur Email Sjabloon",
"invoice_enable" => "Factureren inschakelen",
"invoice_printer" => "Factuur Printer",
"invoice_type" => "Factuur Type",
"is_readable" => "kan gelezen worden, maar de permissies zijn niet correct. Zet deze op 640 of 660 en vernieuw.",
"is_writable" => "kan beschreven worden, maar de permissies zijn niet correct. Zet deze op 750 en vernieuw.",
"item_markup" => "",
"jsprintsetup_required" => "Opgelet! De uitgeschakelde functionaliteit werkt enkel met de jsPrintSetup addon in Firefox. Toch opslaan?",
"language" => "Taal",
"last_used_invoice_number" => "Laatst gebruikte factuurnummer",
"last_used_quote_number" => "Laatst gebruikte offertenummer",
"last_used_work_order_number" => "Laatst gebruikte werkordernummer",
"left" => "Links",
"license" => "Licentie",
"license_configuration" => "Licentie Verklaring",
"line_sequence" => "Lijn nummer",
"lines_per_page" => "Lijnen Per Pagina",
"lines_per_page_number" => "Regels per pagina moet een nummer zijn.",
"lines_per_page_required" => "Regels per pagina is een verplicht veld.",
"locale" => "Locatie",
"locale_configuration" => "Locatie Configuratie",
"locale_info" => "Locatie Configuratie Informatie",
"location" => "Voorraad",
"location_configuration" => "Stock Locaties",
"location_info" => "Instellingen Locatie",
"login_form" => "Inlogformulier Stijl",
"logout" => "Wilt u een backup maken alvorens uit te loggen? Klik [OK] voor backup of [Annuleer] om uit te loggen.",
"mailchimp" => "MailChimp",
"mailchimp_api_key" => "MailChimp API Sleutel",
"mailchimp_configuration" => "MailChimp Configuratie",
"mailchimp_key_successfully" => "API sleutel is geldig.",
"mailchimp_key_unsuccessfully" => "API sleutel is ongeldig.",
"mailchimp_lists" => "MailChimp Lijst(en)",
"mailchimp_tooltip" => "Klik op het icoon voor een API sleutel.",
"message" => "Message",
"message_configuration" => "Message Configuration",
"msg_msg" => "Opgeslagen SMS-bericht",
"msg_msg_placeholder" => "Wilt u gebruik maken van een SMS-sjabloon? sla hier uw bericht op. Laat ander het vak leeg.",
"msg_pwd" => "SMS-API Password",
"msg_pwd_required" => "SMS-API Wachtwoord is een verplicht veld",
"msg_src" => "SMS-API Verzender ID",
"msg_src_required" => "SMS-API Verzender ID is een verplicht veld",
"msg_uid" => "SMS-API Gebruikersnaam",
"msg_uid_required" => "SMS-API Gebruikersnaam is een verplicht veld",
"multi_pack_enabled" => "Multipack Ingeschakeld",
"no_risk" => "Geen veiligheids-/kwetsbaarheidsrisico's.",
"none" => "none",
"notify_alignment" => "Notificatie Pop-up positie",
"number_format" => "Number Format",
"number_locale" => "Localisation",
"number_locale_invalid" => "De ingevoerde locatie is ongeldig. Controleer de link in de tooltip om een geldige waarde te vinden.",
"number_locale_required" => "Nummer formaat is een verplicht veld.",
"number_locale_tooltip" => "Vind een geldig formaat via deze link.",
"os_timezone" => "OSPOS Tijdzone:",
"ospos_info" => "OSPOS Installatiegegevens",
"payment_options_order" => "Betaal opties volgorde",
"perm_risk" => "Verkeerd ingestelde permissies vormen een beveiligingsrisico.",
"phone" => "Telefoon",
"phone_required" => "De telefoonnummer van het bedrijf is een verplicht veld.",
"print_bottom_margin" => "Marge Beneden",
"print_bottom_margin_number" => "De ondermarge moet een getal zijn.",
"print_bottom_margin_required" => "De ondermarge is een verplicht veld.",
"print_delay_autoreturn" => "Automatische retour voor vertraagde verkoop",
"print_delay_autoreturn_number" => "Automatische retour voor vertraagde verkoop is een verplicht veld.",
"print_delay_autoreturn_required" => "Automatische retour voor vertraagde verkoop moet een cijfer zijn.",
"print_footer" => "Print browser voettekst",
"print_header" => "Print browser koptekst",
"print_left_margin" => "Marge Links",
"print_left_margin_number" => "De linkermarge moet een getal zijn.",
"print_left_margin_required" => "De linkermarge is een verplicht veld.",
"print_receipt_check_behaviour" => "Print Ticket selectievakje",
"print_receipt_check_behaviour_always" => "Altijd aangevinkt",
"print_receipt_check_behaviour_last" => "Onthoud laatste selectie",
"print_receipt_check_behaviour_never" => "Altijd uitgetikt",
"print_right_margin" => "Marge Rechts",
"print_right_margin_number" => "De rechtermarge moet een getal zijn.",
"print_right_margin_required" => "De rechtermarge is een verplicht veld.",
"print_silently" => "Toon Printvenster",
"print_top_margin" => "Marge Boven",
"print_top_margin_number" => "De bovenmarge moet een getal zijn.",
"print_top_margin_required" => "De bovenmarge is een verplicht veld.",
"quantity_decimals" => "Kwantiteit Decimalen",
"quick_cash_enable" => "",
"quote_default_comments" => "Standaard Offerte Commentaar",
"receipt" => "Ontvangst",
"receipt_category" => "",
"receipt_configuration" => "Print Instellingen",
"receipt_default" => "Default",
"receipt_font_size" => "Font grootte",
"receipt_font_size_number" => "Font grootte moet een nummer zijn.",
"receipt_font_size_required" => "Font grootte is een verplicht veld.",
"receipt_info" => "Ticket Instellingen",
"receipt_printer" => "Bon Printer",
"receipt_short" => "Kort",
"receipt_show_company_name" => "Toon bedrijfsnaam",
"receipt_show_description" => "Laat beschrijving zien",
"receipt_show_serialnumber" => "Toon Serienummer",
"receipt_show_tax_ind" => "Toon Tax Indicator",
"receipt_show_taxes" => "Toon VAT",
"receipt_show_total_discount" => "Toon Totale Korting",
"receipt_template" => "Bon sjabloon",
"receiving_calculate_average_price" => "Bereken gem. Prijs (Ontvangend)",
"recv_invoice_format" => "Formattering Order #",
"register_mode_default" => "Standaard kassa mode",
"report_an_issue" => "Rapporteer een probleem",
"return_policy_required" => "De retourvoorwaarden moeten ingevuld worden.",
"reward" => "Spaarpunten",
"reward_configuration" => "Spaarpunten configuratie",
"right" => "Rechts",
"sales_invoice_format" => "Formattering Aankoop #",
"sales_quote_format" => "Offerte formaat",
"mailpath_invalid" => "Ongeldig sendmail pad. Alleen letters, cijfers, strepen, underscores, slashes en punten zijn toegestaan.",
"saved_successfully" => "Configuratie werd bewaard.",
"saved_unsuccessfully" => "Configuratie kon niet worden bewaard.",
"security_issue" => "Waarschuwing voor Veiligheidslek",
"server_notice" => "Gebruik de onderstaande info voor het melden van problemen.",
"service_charge" => "",
"show_due_enable" => "",
"show_office_group" => "Toon kantoor icoon",
"statistics" => "Verstuur statistieken",
"statistics_tooltip" => "Verstuur statistieken voor ontwikkeling en verbetering van de applicatie.",
"stock_location" => "Stock locatie",
"stock_location_duplicate" => "Vul een unieke naam in.",
"stock_location_invalid_chars" => "Stock locatie kan geen '_' bevatten.",
"stock_location_required" => "Naam van de stock locatie is een verplicht veld.",
"suggestions_fifth_column" => "",
"suggestions_first_column" => "Kolom 1",
"suggestions_fourth_column" => "",
"suggestions_layout" => "Zoek Suggesties Layout",
"suggestions_second_column" => "Kolom 2",
"suggestions_third_column" => "Kolom 3",
"system_conf" => "Instelling en Conf",
"system_info" => "System Info",
"table" => "Tafel",
"table_configuration" => "Tafel Configuratie",
"takings_printer" => "Ontvangst Printer",
"tax" => "VAT",
"tax_category" => "VAT Categorie",
"tax_category_duplicate" => "De ingevulde VAT categorie bestaat al.",
"tax_category_invalid_chars" => "De ingevulde VAT categorie is ongeldig.",
"tax_category_required" => "De VAT categorie is verplicht.",
"tax_category_used" => "De VAT categorie kan niet verwijderd worden omdat die in gebruik is.",
"tax_configuration" => "VAT Configuratie",
"tax_decimals" => "Belasting Decimalen",
"tax_id" => "Tax id",
"tax_included" => "VAT Inbegrepen",
"theme" => "Theme",
"theme_preview" => "Voorbeeld Thema:",
"thousands_separator" => "duizenden Separator",
"timezone" => "Tijdzone",
"timezone_error" => "OSPOS tijdzone is verschillend van uw lokale tijdzone.",
"top" => "Top",
"use_destination_based_tax" => "Activeer 'Destination Based Tax'",
"user_timezone" => "Lokale tijdzone:",
"website" => "Website",
"wholesale_markup" => "",
"work_order_enable" => "Werk Order Ondersteuning",
"work_order_format" => "Werk Order Formaat",
];