Files
opensourcepos/app/Language/zh-Hans/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
22 KiB
PHP

<?php
return [
"address" => "公司地址",
"address_required" => "公司地址为必填",
"all_set" => "All file permissions are set correctly!",
"allow_duplicate_barcodes" => "允许重复条形码",
"apostrophe" => "apostrophe",
"backup_button" => "Backup",
"backup_database" => "Backup Database",
"barcode" => "条形码",
"barcode_company" => "公司名称",
"barcode_configuration" => "设置条形码",
"barcode_content" => "条形码内容",
"barcode_first_row" => "条形码第一行",
"barcode_font" => "条形码字体",
"barcode_formats" => "输入格式",
"barcode_generate_if_empty" => "Generate if empty",
"barcode_height" => "条形码高度 (px)",
"barcode_id" => "商品 ID/名字",
"barcode_info" => "条形码设置信息",
"barcode_layout" => "条形码布局",
"barcode_name" => "条形码名字",
"barcode_number" => "UPC/EAN/ISBN",
"barcode_number_in_row" => "Number in row",
"barcode_page_cellspacing" => "Display page cellspacing",
"barcode_page_width" => "条形码显示宽度",
"barcode_price" => "金额",
"barcode_second_row" => "条形码第二行",
"barcode_third_row" => "条形码第三行",
"barcode_tooltip" => "警告:此功能可能导致重复项被导入或创建。 如果您不想重复的条形码,请不要使用。",
"barcode_type" => "条形码类型",
"barcode_width" => "条形码宽度 (px)",
"bottom" => "Bottom",
"cash_button" => "",
"cash_button_1" => "",
"cash_button_2" => "",
"cash_button_3" => "",
"cash_button_4" => "",
"cash_button_5" => "",
"cash_button_6" => "",
"cash_decimals" => "现金小数点",
"cash_decimals_tooltip" => "",
"cash_rounding" => "",
"category_dropdown" => "显示类别为下拉式菜单",
"center" => "Center",
"change_apperance_tooltip" => "",
"comma" => "comma",
"company" => "公司名称",
"company_avatar" => "",
"company_change_image" => "Change Image",
"company_logo" => "Company Logo",
"company_remove_image" => "Remove Image",
"company_required" => "公司名称为必填",
"company_select_image" => "选择公司图片",
"company_website_url" => "公司网址格式错误 (http://...)",
"country_codes" => "国家地区代码",
"country_codes_tooltip" => "Comma separated list of country codes for nominatim address lookup.",
"currency_code" => "",
"currency_decimals" => "Currency Decimals",
"currency_symbol" => "货币符号",
"current_employee_only" => "",
"customer_reward" => "",
"customer_reward_duplicate" => "",
"customer_reward_enable" => "",
"customer_reward_invalid_chars" => "",
"customer_reward_required" => "",
"customer_sales_tax_support" => "",
"date_or_time_format" => "",
"datetimeformat" => "Date and Time format",
"decimal_point" => "Decimal Point",
"default_barcode_font_size_number" => "默认条形码字体大小必须是数字",
"default_barcode_font_size_required" => "The default barcode font size is a required field",
"default_barcode_height_number" => "The default barcode height must be a number",
"default_barcode_height_required" => "The default barcode height is a required field",
"default_barcode_num_in_row_number" => "The default barcode num in row must be a number",
"default_barcode_num_in_row_required" => "The default barcode num in row is a required field",
"default_barcode_page_cellspacing_number" => "The default barcode page cellspacing must be a number",
"default_barcode_page_cellspacing_required" => "The default barcode page cellspacing is a required field",
"default_barcode_page_width_number" => "The default barcode page width must be a number",
"default_barcode_page_width_required" => "The default barcode page width is a required field",
"default_barcode_width_number" => "The default barcode width must be a number",
"default_barcode_width_required" => "The default barcode width is a required field",
"default_item_columns" => "",
"default_origin_tax_code" => "",
"default_receivings_discount" => "",
"default_receivings_discount_number" => "",
"default_receivings_discount_required" => "",
"default_sales_discount" => "Default Sales Discount %",
"default_sales_discount_number" => "The default sales discount must be a number",
"default_sales_discount_required" => "The default sales discount is a required field",
"default_tax_category" => "",
"default_tax_code" => "",
"default_tax_jurisdiction" => "",
"default_tax_name_number" => "",
"default_tax_name_required" => "The default tax name is a required field",
"default_tax_rate" => "預設稅率 %",
"default_tax_rate_1" => "稅率 1",
"default_tax_rate_2" => "稅率 2",
"default_tax_rate_3" => "",
"default_tax_rate_number" => "預設稅率必需為數字",
"default_tax_rate_required" => "預設稅率為必填",
"derive_sale_quantity" => "",
"derive_sale_quantity_tooltip" => "",
"dinner_table" => "",
"dinner_table_duplicate" => "",
"dinner_table_enable" => "",
"dinner_table_invalid_chars" => "",
"dinner_table_required" => "",
"dot" => "dot",
"email" => "郵箱",
"email_configuration" => "Email Configuration",
"email_mailpath" => "Path to Sendmail",
"email_protocol" => "Protocol",
"email_receipt_check_behaviour" => "",
"email_receipt_check_behaviour_always" => "",
"email_receipt_check_behaviour_last" => "",
"email_receipt_check_behaviour_never" => "",
"email_smtp_crypto" => "SMTP Encryption",
"email_smtp_host" => "SMTP Server",
"email_smtp_pass" => "SMTP Password",
"email_smtp_port" => "SMTP Port",
"email_smtp_timeout" => "SMTP Timeout (s)",
"email_smtp_user" => "SMTP Username",
"enable_avatar" => "",
"enable_avatar_tooltip" => "",
"enable_dropdown_tooltip" => "",
"enable_new_look" => "",
"enable_right_bar" => "",
"enable_right_bar_tooltip" => "",
"enforce_privacy" => "",
"enforce_privacy_tooltip" => "",
"fax" => "傳真",
"file_perm" => "There are problems with file permissions please fix and reload this page.",
"financial_year" => "",
"financial_year_apr" => "",
"financial_year_aug" => "",
"financial_year_dec" => "",
"financial_year_feb" => "",
"financial_year_jan" => "",
"financial_year_jul" => "",
"financial_year_jun" => "",
"financial_year_mar" => "",
"financial_year_may" => "",
"financial_year_nov" => "",
"financial_year_oct" => "",
"financial_year_sep" => "",
"floating_labels" => "",
"gcaptcha_enable" => "",
"gcaptcha_secret_key" => "",
"gcaptcha_secret_key_required" => "",
"gcaptcha_site_key" => "",
"gcaptcha_site_key_required" => "",
"gcaptcha_tooltip" => "",
"general" => "General",
"general_configuration" => "General Configuration",
"giftcard_number" => "",
"giftcard_random" => "",
"giftcard_series" => "",
"image_allowed_file_types" => "",
"image_max_height_tooltip" => "",
"image_max_size_tooltip" => "",
"image_max_width_tooltip" => "",
"image_restrictions" => "",
"include_hsn" => "",
"info" => "儲存組態",
"info_configuration" => "儲存組態",
"input_groups" => "",
"integrations" => "",
"integrations_configuration" => "",
"invoice" => "Invoice",
"invoice_configuration" => "Invoice Print Settings",
"invoice_default_comments" => "Default Invoice Comments",
"invoice_email_message" => "Invoice Email Template",
"invoice_enable" => "Enable Invoicing",
"invoice_printer" => "Invoice Printer",
"invoice_type" => "",
"is_readable" => "",
"is_writable" => "is writable, but the permissions are higher than 750.",
"item_markup" => "",
"jsprintsetup_required" => "Warning! This disabled functionality will only work if you have the FireFox jsPrintSetup addon installed. Save anyway?",
"language" => "語言",
"last_used_invoice_number" => "",
"last_used_quote_number" => "",
"last_used_work_order_number" => "",
"left" => "Left",
"license" => "License",
"license_configuration" => "License Statement",
"line_sequence" => "",
"lines_per_page" => "Lines Per Page",
"lines_per_page_number" => "The lines per page must be a number",
"lines_per_page_required" => "The lines per page is a required field",
"locale" => "Localisation",
"locale_configuration" => "Localisation Configuration",
"locale_info" => "Localisation Configuration Information",
"location" => "Stock",
"location_configuration" => "Stock Locations",
"location_info" => "Location Configuration Information",
"login_form" => "",
"logout" => "Don't you want to make a backup before logging out?",
"mailchimp" => "",
"mailchimp_api_key" => "",
"mailchimp_configuration" => "",
"mailchimp_key_successfully" => "",
"mailchimp_key_unsuccessfully" => "",
"mailchimp_lists" => "",
"mailchimp_tooltip" => "",
"message" => "Message",
"message_configuration" => "Message Configuration",
"msg_msg" => "Saved Text Message",
"msg_msg_placeholder" => "If you wish to use a SMS template save your message here. Otherwise leave the box blank.",
"msg_pwd" => "SMS-API Password",
"msg_pwd_required" => "SMS-API Password is a required field",
"msg_src" => "SMS-API Sender ID",
"msg_src_required" => "SMS-API Sender ID is a required field",
"msg_uid" => "SMS-API Username",
"msg_uid_required" => "SMS-API Username is a required field",
"multi_pack_enabled" => "",
"no_risk" => "No security/vulnerability risks.",
"none" => "none",
"notify_alignment" => "Notification Popup Position",
"number_format" => "Number Format",
"number_locale" => "Localisation",
"number_locale_invalid" => "The entered locale is invalid. Check the link in the tooltip to find a sensible value",
"number_locale_required" => "Number Locale is a required field",
"number_locale_tooltip" => "Find a suitable locale through this link",
"os_timezone" => "",
"ospos_info" => "",
"payment_options_order" => "Payment Options Order",
"perm_risk" => "Permissions higher than 750 leaves this software at risk.",
"phone" => "公司电话",
"phone_required" => "公司电话为必填",
"print_bottom_margin" => "Margin Bottom",
"print_bottom_margin_number" => "The default bottom margin must be a number",
"print_bottom_margin_required" => "The default bottom margin is a required field",
"print_delay_autoreturn" => "",
"print_delay_autoreturn_number" => "",
"print_delay_autoreturn_required" => "",
"print_footer" => "Print Browser Footer",
"print_header" => "Print Browser Header",
"print_left_margin" => "Margin Left",
"print_left_margin_number" => "The default left margin must be a number",
"print_left_margin_required" => "The default left margin is a required field",
"print_receipt_check_behaviour" => "",
"print_receipt_check_behaviour_always" => "",
"print_receipt_check_behaviour_last" => "",
"print_receipt_check_behaviour_never" => "",
"print_right_margin" => "Margin Right",
"print_right_margin_number" => "The default right margin must be a number",
"print_right_margin_required" => "The default right margin is a required field",
"print_silently" => "Show Print Dialog",
"print_top_margin" => "Margin Top",
"print_top_margin_number" => "The default top margin must be a number",
"print_top_margin_required" => "The default top margin is a required field",
"quantity_decimals" => "Quantity Decimals",
"quick_cash_enable" => "",
"quote_default_comments" => "",
"receipt" => "收据",
"receipt_category" => "",
"receipt_configuration" => "收据打印设置",
"receipt_default" => "默认",
"receipt_font_size" => "字体大小",
"receipt_font_size_number" => "字体大小必须是数字",
"receipt_font_size_required" => "字体大小是必填的",
"receipt_info" => "Receipt Configuration Information",
"receipt_printer" => "收据打印机",
"receipt_short" => "Short",
"receipt_show_company_name" => "显示公司名称",
"receipt_show_description" => "显示描述",
"receipt_show_serialnumber" => "显示序列号",
"receipt_show_tax_ind" => "",
"receipt_show_taxes" => "显示税",
"receipt_show_total_discount" => "Show Total Discount",
"receipt_template" => "收据模板",
"receiving_calculate_average_price" => "Calc avg. Price (Receiving)",
"recv_invoice_format" => "Receivings Invoice Format",
"register_mode_default" => "",
"report_an_issue" => "",
"return_policy_required" => "退换货政策为必填",
"reward" => "",
"reward_configuration" => "",
"right" => "Right",
"sales_invoice_format" => "Sales Invoice Format",
"sales_quote_format" => "",
"mailpath_invalid" => "",
"saved_successfully" => "組態設置儲存成功",
"saved_unsuccessfully" => "組態設置儲存失敗",
"security_issue" => "Security Vulnerability Warning",
"server_notice" => "Please use the below info for issue reporting.",
"service_charge" => "",
"show_due_enable" => "",
"show_office_group" => "",
"statistics" => "Send statistics",
"statistics_tooltip" => "Send statistics for development and feature improvement purposes",
"stock_location" => "仓库地址",
"stock_location_duplicate" => "仓库地址不可重复",
"stock_location_invalid_chars" => "The stock location name can not contain '_'",
"stock_location_required" => "Stock location number is a required field",
"suggestions_fifth_column" => "",
"suggestions_first_column" => "",
"suggestions_fourth_column" => "",
"suggestions_layout" => "",
"suggestions_second_column" => "",
"suggestions_third_column" => "",
"system_conf" => "Setup & Conf",
"system_info" => "System Info",
"table" => "",
"table_configuration" => "",
"takings_printer" => "Takings Printer",
"tax" => "",
"tax_category" => "",
"tax_category_duplicate" => "",
"tax_category_invalid_chars" => "",
"tax_category_required" => "",
"tax_category_used" => "",
"tax_configuration" => "",
"tax_decimals" => "税的小数点",
"tax_id" => "税ID",
"tax_included" => "含税",
"theme" => "主题",
"theme_preview" => "",
"thousands_separator" => "千位分隔符",
"timezone" => "时区",
"timezone_error" => "",
"top" => "Top",
"use_destination_based_tax" => "",
"user_timezone" => "",
"website" => "网站",
"wholesale_markup" => "",
"work_order_enable" => "",
"work_order_format" => "",
];