Files
opensourcepos/app/Language/nl-NL/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
26 KiB
PHP

<?php
return [
"address" => "Bedrijfsadres",
"address_required" => "Bedrijfsadres is een vereist veld.",
"all_set" => "Alle bestandsmachtigingen zijn juist ingesteld!",
"allow_duplicate_barcodes" => "Dezelfde streepjescodes toestaan",
"apostrophe" => "apostrof",
"backup_button" => "Reservekopie",
"backup_database" => "Reservekopie database",
"barcode" => "Streepjescode",
"barcode_company" => "Bedrijfsnaam",
"barcode_configuration" => "Streepjescode configuratie",
"barcode_content" => "Streepjescode inhoud",
"barcode_first_row" => "Rij 1",
"barcode_font" => "Lettertype",
"barcode_formats" => "Indelingen invoeren",
"barcode_generate_if_empty" => "Genereren wanneer leeg.",
"barcode_height" => "Hoogte (px)",
"barcode_id" => "Artikel ID/Naam",
"barcode_info" => "Streepjescode configuratie informatie",
"barcode_layout" => "Streepjescode indeling",
"barcode_name" => "Naam",
"barcode_number" => "Streepjescode",
"barcode_number_in_row" => "Nummer in rij",
"barcode_page_cellspacing" => "Pagina cel afstand weergeven.",
"barcode_page_width" => "Pagina breedte weergeven",
"barcode_price" => "Prijs",
"barcode_second_row" => "Rij 2",
"barcode_third_row" => "Rij 3",
"barcode_tooltip" => "Waarschuwing: Deze functie kan veroorzaken dat er dubbele items worden geïmporteerd of aangemaakt. Niet gebruiken als u geen dubbele streepjescodes wilt.",
"barcode_type" => "Streepjescode soort",
"barcode_width" => "Breedte (px)",
"bottom" => "Onderaan",
"cash_button" => "",
"cash_button_1" => "",
"cash_button_2" => "",
"cash_button_3" => "",
"cash_button_4" => "",
"cash_button_5" => "",
"cash_button_6" => "",
"cash_decimals" => "Contant decimalen",
"cash_decimals_tooltip" => "Wanneer contant decimalen en valuta decimalen gelijk zijn, vindt er geen contant afronding plaats. Tenzij contant afronding is ingesteld op halveren vijf.",
"cash_rounding" => "Contant afronding",
"category_dropdown" => "Categorie als vervolgkeuzelijst weergeven",
"center" => "Centreren",
"change_apperance_tooltip" => "",
"comma" => "komma",
"company" => "Bedrijfsnaam",
"company_avatar" => "",
"company_change_image" => "Afbeelding wijzigen",
"company_logo" => "Bedrijfslogo",
"company_remove_image" => "Afbeelding verwijderen",
"company_required" => "Bedrijfsnaam is een vereist veld",
"company_select_image" => "Afbeelding selecteren",
"company_website_url" => "Bedrijfswebsite is geen geldige URL (http://...).",
"country_codes" => "Land codes",
"country_codes_tooltip" => "Kommagescheiden lijst van land codes voor het opzoeken van adres bij naam.",
"currency_code" => "Valuta code",
"currency_decimals" => "Valuta decimalen",
"currency_symbol" => "Valuta symbool",
"current_employee_only" => "",
"customer_reward" => "Beloning",
"customer_reward_duplicate" => "Beloning moet uniek zijn.",
"customer_reward_enable" => "Klantbeloningen inschakelen",
"customer_reward_invalid_chars" => "Beloning met '_' niet bevatten",
"customer_reward_required" => "Beloning is een vereist veld",
"customer_sales_tax_support" => "",
"date_or_time_format" => "Datum en tijd filter",
"datetimeformat" => "Datum en tijd indeling",
"decimal_point" => "Decimaal punt",
"default_barcode_font_size_number" => "Standaard streepjescode lettergrootte moet een getal zijn.",
"default_barcode_font_size_required" => "Standaard streepjescode lettergrootte is een vereist veld.",
"default_barcode_height_number" => "Standaard streepjescode hoogte moet een getal zijn.",
"default_barcode_height_required" => "Standaard streepjescode hoogte is een vereist veld.",
"default_barcode_num_in_row_number" => "Standaard streepjescode nummer in een rij moet een getal zijn.",
"default_barcode_num_in_row_required" => "Standaard streepjescode nummer in een rij is een vereist veld.",
"default_barcode_page_cellspacing_number" => "Standaard streepjescode pagina cel afstand moet een getal zijn.",
"default_barcode_page_cellspacing_required" => "Standaard streepjescode pagina cel afstand is een vereist veld.",
"default_barcode_page_width_number" => "Standaard streepjescode pagina breedte moet een getal zijn.",
"default_barcode_page_width_required" => "Standaard streepjescode pagina breedte is een vereist veld.",
"default_barcode_width_number" => "Standaard streepjescode breedte moet een getal zijn.",
"default_barcode_width_required" => "Standaard streepjescode breedte is een vereist veld.",
"default_item_columns" => "Standaard zichtbare artikelkolommen",
"default_origin_tax_code" => "Standaard oorsprong belastingcode",
"default_receivings_discount" => "Standaard leveringskorting",
"default_receivings_discount_number" => "Standaard leveringskorting moet een getal zijn.",
"default_receivings_discount_required" => "Standaard leveringskorting is een vereist veld.",
"default_sales_discount" => "Standaard verkoopkorting",
"default_sales_discount_number" => "Standaard verkoopkorting moet een getal zijn.",
"default_sales_discount_required" => "Standaard verkoopkorting is een vereist veld.",
"default_tax_category" => "Standaard belastingcategorie",
"default_tax_code" => "Standaard belastingcode",
"default_tax_jurisdiction" => "Standaard BTW-jurisdictie",
"default_tax_name_number" => "Standaard belastingnaam moet een tekenreeks zijn.",
"default_tax_name_required" => "Standaard belastingnaam is een vereist veld.",
"default_tax_rate" => "Standaard belastingtarief %",
"default_tax_rate_1" => "Belasting 1 tarief",
"default_tax_rate_2" => "Belasting 2 tarief",
"default_tax_rate_3" => "",
"default_tax_rate_number" => "Standaard belastingtarief moet een getal zijn.",
"default_tax_rate_required" => "Standaard belastingtarief is een vereist veld.",
"derive_sale_quantity" => "Afgeleide verkoophoeveelheid toestaan",
"derive_sale_quantity_tooltip" => "Wanneer aangevinkt zal er een nieuwe artikelsoort worden aangeleverd voor artikelen geordend op uitgebreid bedrag",
"dinner_table" => "Tafel",
"dinner_table_duplicate" => "Tafel moet uniek zijn.",
"dinner_table_enable" => "Eettafels inschakelen",
"dinner_table_invalid_chars" => "Tafelnaam mag '_' niet bevatten.",
"dinner_table_required" => "Tafel is een vereist veld.",
"dot" => "punt",
"email" => "E-mail",
"email_configuration" => "E-mail configuratie",
"email_mailpath" => "Pad naar Sendmail",
"email_protocol" => "Protocol",
"email_receipt_check_behaviour" => "E-mail ontvangstbevestiging selectievakje",
"email_receipt_check_behaviour_always" => "Altijd geselecteerd",
"email_receipt_check_behaviour_last" => "Laatste selectie onthouden",
"email_receipt_check_behaviour_never" => "Nooit geselecteerd",
"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" => "Privacy afdwingen",
"enforce_privacy_tooltip" => "Privacy van klanten beschermen door data te versleutelen als deze verwijderd wordt",
"fax" => "Fax",
"file_perm" => "Er zijn problemen met bestandsmachtigingen. Eerst oplossen en pagina vernieuwen.",
"financial_year" => "Begin boekjaar",
"financial_year_apr" => "1 april",
"financial_year_aug" => "1 augustus",
"financial_year_dec" => "1 december",
"financial_year_feb" => "1 februari",
"financial_year_jan" => "1 januari",
"financial_year_jul" => "1 juli",
"financial_year_jun" => "1 juni",
"financial_year_mar" => "1 maart",
"financial_year_may" => "1 mei",
"financial_year_nov" => "1 november",
"financial_year_oct" => "1 oktober",
"financial_year_sep" => "1 september",
"floating_labels" => "",
"gcaptcha_enable" => "Aanmeldingspagina reCAPTCHA",
"gcaptcha_secret_key" => "reCAPTCHA geheime sleutel",
"gcaptcha_secret_key_required" => "reCAPTCHA geheime sleutel is een vereist veld",
"gcaptcha_site_key" => "reCAPTCHA site sleutel",
"gcaptcha_site_key_required" => "reCAPTCHA site sleutel is een vereist veld",
"gcaptcha_tooltip" => "Aanmeldingspagina beschermen met Google reCAPTCHA. Klik op het pictogram om API sleutel te koppelen.",
"general" => "Algemeen",
"general_configuration" => "Algemene configuratie",
"giftcard_number" => "Cadeaubonnummer",
"giftcard_random" => "Willekeurige genereren",
"giftcard_series" => "Genereren in series",
"image_allowed_file_types" => "Toegestane bestandstypen",
"image_max_height_tooltip" => "Maximaal toegestane hoogte van afbeelding uploads in pixels (px).",
"image_max_size_tooltip" => "Maximaal toegestane bestandsgrootte van afbeelding uploads in kilobytes (kb).",
"image_max_width_tooltip" => "Maximaal toegestane breedte van afbeelding uploads in pixels (px).",
"image_restrictions" => "Afbeelding upload beperkingen",
"include_hsn" => "Ondersteuning voor HSN codes inschakelen",
"info" => "Informatie",
"info_configuration" => "Winkelinformatie",
"input_groups" => "",
"integrations" => "Integraties",
"integrations_configuration" => "Derde partij integraties",
"invoice" => "Factuur",
"invoice_configuration" => "Factuur afdrukinstellingen",
"invoice_default_comments" => "Standaard factuur opmerkingen",
"invoice_email_message" => "Factuur e-mail sjabloon",
"invoice_enable" => "Facturering inschakelen",
"invoice_printer" => "Factuur printer",
"invoice_type" => "Factuur soort",
"is_readable" => "is leesbaar, maar de machtigingen zijn onjuist ingesteld. Instellen op 640 of 660 en vernieuwen.",
"is_writable" => "is schrijfbaar, maar de machtigingen zijn onjuist ingesteld. Instellen op 750 en vernieuwen.",
"item_markup" => "",
"jsprintsetup_required" => "Waarschuwing: Deze functionaliteit werkt alleen wanneer je de FireFox jsPrintSetup invoegtoepassing hebt geïnstalleerd. 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 W/O-nummer",
"left" => "Links",
"license" => "Licentie",
"license_configuration" => "Licentieoverzicht",
"line_sequence" => "Lijn volgorde",
"lines_per_page" => "Lijnen per pagina",
"lines_per_page_number" => "Lijnen per pagina moet een getal zijn.",
"lines_per_page_required" => "Lijnen per pagina is een vereist veld.",
"locale" => "Lokalisatie",
"locale_configuration" => "Lokalisatie configuratie",
"locale_info" => "Lokalisatie configuratie informatie",
"location" => "Voorraad",
"location_configuration" => "Voorraadlocaties",
"location_info" => "Locatie configuratie informatie",
"login_form" => "Stijl aanmeldformulier",
"logout" => "Wilt u een reservekopie maken voor het afmelden? Klik op [OK] om te bevestigen of op [Annuleren] om toch af te melden.",
"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 pictogram voor een API-sleutel.",
"message" => "Bericht",
"message_configuration" => "Bericht configuratie",
"msg_msg" => "Opgeslagen sms-bericht",
"msg_msg_placeholder" => "Sla uw bericht hier op als u een sms-sjabloon wilt maken, zo niet laat het vak leeg.",
"msg_pwd" => "Sms API wachtwoord",
"msg_pwd_required" => "Sms API wachtwoord is een vereist veld",
"msg_src" => "Sms API afzender ID",
"msg_src_required" => "Sms API afzender ID is een vereist veld",
"msg_uid" => "Sms API gebruikersnaam",
"msg_uid_required" => "Sms API gebruikersnaam is een vereist veld",
"multi_pack_enabled" => "Meerdere pakketten per artikel",
"no_risk" => "Geen kwetsbaarheden/beveiligingsrisico's.",
"none" => "geen",
"notify_alignment" => "Meldingspop-up positie",
"number_format" => "Nummer indeling",
"number_locale" => "Lokalisatie",
"number_locale_invalid" => "De ingevoerde landinstelling is ongeldig. Bekijk de koppeling in de knopinfo om een geldige landinstelling te vinden.",
"number_locale_required" => "Nummer landinstelling is een vereist veld.",
"number_locale_tooltip" => "Vind een geschikte landinstelling via deze koppeling.",
"os_timezone" => "OSPOS tijdzone:",
"ospos_info" => "OSPOS installatie info",
"payment_options_order" => "Betalingsopties volgorde",
"perm_risk" => "Onjuiste machtigingen zijn een risico voor deze software.",
"phone" => "Telefoonnummer bedrijf",
"phone_required" => "Telefoonnummer bedrijf is een vereist veld.",
"print_bottom_margin" => "Marge onderkant",
"print_bottom_margin_number" => "Marge onderkant moet een getal zijn.",
"print_bottom_margin_required" => "Marge onderkant is een vereist veld.",
"print_delay_autoreturn" => "Vertraging automatisch terugkeren naar verkoop",
"print_delay_autoreturn_number" => "Vertraging automatisch terugkeren naar verkoop is een vereist veld.",
"print_delay_autoreturn_required" => "Vertraging automatisch terugkeren naar verkoop moet een getal zijn.",
"print_footer" => "Browser voettekst afdrukken",
"print_header" => "Browser koptekst afdrukken",
"print_left_margin" => "Marge linkerkant",
"print_left_margin_number" => "Marge linkerkant moet een getal zijn.",
"print_left_margin_required" => "Marge linkerkant is een vereist veld.",
"print_receipt_check_behaviour" => "Kassabon afdrukken selectievakje",
"print_receipt_check_behaviour_always" => "Altijd geselecteerd",
"print_receipt_check_behaviour_last" => "Laatst gebruikt onthouden",
"print_receipt_check_behaviour_never" => "Nooit geselecteerd",
"print_right_margin" => "Marge rechterkant",
"print_right_margin_number" => "Marge rechterkant moet een getal zijn.",
"print_right_margin_required" => "Marge rechterkant is een vereist veld.",
"print_silently" => "Dialoogvenster afdrukken weergeven",
"print_top_margin" => "Marge bovenkant",
"print_top_margin_number" => "Marge bovenkant moet een getal zijn.",
"print_top_margin_required" => "Marge bovenkant is een vereist veld.",
"quantity_decimals" => "Hoeveelheid decimalen",
"quick_cash_enable" => "",
"quote_default_comments" => "Standaard offerte opmerkingen",
"receipt" => "Kassabon",
"receipt_category" => "",
"receipt_configuration" => "Kassabon afdrukinstellingen",
"receipt_default" => "Standaard",
"receipt_font_size" => "Lettergrootte",
"receipt_font_size_number" => "Lettergrootte moet een getal zijn.",
"receipt_font_size_required" => "Lettergrootte is een vereist veld.",
"receipt_info" => "Kassabon configuratie informatie",
"receipt_printer" => "Ticket printer",
"receipt_short" => "Kort",
"receipt_show_company_name" => "Bedrijfsnaam weergeven",
"receipt_show_description" => "Beschrijving weergeven",
"receipt_show_serialnumber" => "Serienummer weergeven",
"receipt_show_tax_ind" => "Belastingindicator weergeven",
"receipt_show_taxes" => "Belastingen weergeven",
"receipt_show_total_discount" => "Totale korting weergeven",
"receipt_template" => "Kassabon sjabloon",
"receiving_calculate_average_price" => "Gemiddelde prijs berekenen (levering)",
"recv_invoice_format" => "Leveringen factuurindeling",
"register_mode_default" => "Standaard kassa modus",
"report_an_issue" => "Probleem melden",
"return_policy_required" => "Retourbeleid is een vereist veld.",
"reward" => "Beloning",
"reward_configuration" => "Beloning configuratie",
"right" => "Rechts",
"sales_invoice_format" => "Indeling verkoopfactuur",
"sales_quote_format" => "Indeling verkoopofferte",
"mailpath_invalid" => "Ongeldig sendmail pad. Alleen letters, cijfers, strepen, underscores, slashes en punten zijn toegestaan.",
"saved_successfully" => "Configuratie opgeslagen.",
"saved_unsuccessfully" => "Configuratie opslaan mislukt.",
"security_issue" => "Beveilingskwetsbaarheid waarschuwing",
"server_notice" => "Gebruik onderstaande info om het probleem te melden.",
"service_charge" => "",
"show_due_enable" => "",
"show_office_group" => "Kantoor pictogram weergeven",
"statistics" => "Statistieken verzenden",
"statistics_tooltip" => "Statistieken verzenden voor ontwikkelings- en functie verbeteringen.",
"stock_location" => "Voorraadlocatie",
"stock_location_duplicate" => "Voorraadlocatie moet uniek zijn.",
"stock_location_invalid_chars" => "Voorraadlocatie mag '_' niet bevatten.",
"stock_location_required" => "Voorraadlocatie is een vereist veld.",
"suggestions_fifth_column" => "",
"suggestions_first_column" => "Kolom 1",
"suggestions_fourth_column" => "",
"suggestions_layout" => "Indeling zoeksuggesties",
"suggestions_second_column" => "Kolom 2",
"suggestions_third_column" => "Kolom 3",
"system_conf" => "Installatie & configuratie",
"system_info" => "Systeeminfo",
"table" => "Tafel",
"table_configuration" => "Tafel configuratie",
"takings_printer" => "Kassabon printer",
"tax" => "Belasting",
"tax_category" => "belastingcategorie",
"tax_category_duplicate" => "De ingevoerde belastingcategorie bestaat al.",
"tax_category_invalid_chars" => "De ingevoerde belastingcategorie is ongeldig.",
"tax_category_required" => "De belastingcategorie is vereist.",
"tax_category_used" => "Kan belastingcategorie niet verwijderen omdat deze in gebruik is.",
"tax_configuration" => "Belasting configuratie",
"tax_decimals" => "Belasting decimalen",
"tax_id" => "Belasting ID",
"tax_included" => "Inclusief belasting",
"theme" => "Thema",
"theme_preview" => "Thema voorbeeld:",
"thousands_separator" => "Duizenden scheidingsteken",
"timezone" => "Tijdzone",
"timezone_error" => "OSPOS tijdzone is anders dan uw lokale tijdzone.",
"top" => "Boven",
"use_destination_based_tax" => "Bestemming gebaseerde belasting gebruiken",
"user_timezone" => "Lokale tijdzone:",
"website" => "Website",
"wholesale_markup" => "",
"work_order_enable" => "Werkorder ondersteuning",
"work_order_format" => "Indeling werkorder",
];