From 8a349c8fef59e710fb19b72e2a6efd9b4c7547bb Mon Sep 17 00:00:00 2001
From: Darko Gjorgjijoski <5760249+gdarko@users.noreply.github.com>
Date: Fri, 12 Jun 2026 14:49:39 +0200
Subject: [PATCH] New translations en.json (Chinese Simplified)
[ci skip]
---
lang/zh-cn.json | 306 ++++++++++++++++++++++++++++++++++++++++++------
1 file changed, 269 insertions(+), 37 deletions(-)
diff --git a/lang/zh-cn.json b/lang/zh-cn.json
index bba81fba..1b49fa54 100644
--- a/lang/zh-cn.json
+++ b/lang/zh-cn.json
@@ -12,7 +12,13 @@
"settings": "设置",
"logout": "登出",
"users": "用户",
- "modules": "模块"
+ "members": "Members",
+ "modules": "模块",
+ "documents": "Documents",
+ "admin": "Administration",
+ "administration": "Administration",
+ "companies": "Companies",
+ "all_users": "Users"
},
"general": {
"add_company": "添加新公司",
@@ -22,15 +28,16 @@
"save": "保存",
"create": "创建",
"cancel": "取消",
+ "accept": "Accept",
+ "decline": "Decline",
+ "welcome": "Welcome",
+ "no_company_description": "You are not a member of any company yet. Accept an invitation below or contact your administrator.",
+ "app_version": "Application Version",
+ "database": "Database",
+ "collapse": "Collapse",
"update": "更新",
"deselect": "反选",
"download": "下载",
- "export": "Export",
- "export_csv": "Export CSV",
- "export_one_line_per_invoice": "One line per invoice",
- "export_one_line_per_invoice_item": "One line per invoice item",
- "export_one_line_per_estimate": "One line per estimate",
- "export_one_line_per_estimate_item": "One line per estimate item",
"from_date": "开始日期",
"to_date": "结束时间",
"from": "从",
@@ -97,6 +104,7 @@
"street_2": "街道2",
"action_failed": "操作失败",
"retry": "重试",
+ "unable_to_load_pdf": "Unable to load document preview",
"choose_note": "选择笔记",
"no_note_found": "No Note Found",
"insert_note": "Insert Note",
@@ -446,6 +454,7 @@
"update_expense": "Update Expense",
"edit_invoice": "Edit Invoice",
"new_invoice": "New Invoice",
+ "one_time": "One-time",
"save_invoice": "Save Invoice",
"update_invoice": "Update Invoice",
"add_new_tax": "Add New Tax",
@@ -460,6 +469,8 @@
"cloned_successfully": "Invoice cloned successfully",
"clone_invoice": "Clone Invoice",
"confirm_clone": "This invoice will be cloned into a new Invoice",
+ "convert_to_estimate": "Convert to Estimate",
+ "confirm_convert_to_estimate": "This invoice will be converted into a new Estimate",
"item": {
"title": "Item Title",
"description": "Description",
@@ -545,6 +556,7 @@
"update_expense": "Update Expense",
"edit_invoice": "Edit Recurring Invoice",
"new_invoice": "New Recurring Invoice",
+ "recurring": "Recurring",
"send_automatically": "Send Automatically",
"send_automatically_desc": "Enable this, if you would like to send the invoice automatically to the customer when its created.",
"save_invoice": "Save Recurring Invoice",
@@ -589,7 +601,13 @@
"every_hour": "Every Hour",
"every_2_hour": "Every 2 Hour",
"every_day_at_midnight": "Every day at midnight",
+ "every_day": "Every Day",
"every_week": "Every Week",
+ "every_2_weeks": "Every 2 Weeks",
+ "every_month": "Every Month",
+ "every_2_months": "Every 2 Months",
+ "every_quarter": "Every 3 Months (Quarterly)",
+ "every_year": "Every Year",
"every_15_days_at_midnight": "Every 15 days at midnight",
"on_the_first_day_of_every_month_at_midnight": "On the first day of every month at 00:00",
"every_6_month": "Every 6 Month",
@@ -608,7 +626,8 @@
"none": "None",
"date": "Date",
"count": "Count"
- }
+ },
+ "make_recurring": "Make Recurring"
},
"payments": {
"title": "Payments",
@@ -683,10 +702,6 @@
"no_expenses": "No expenses yet!",
"list_of_expenses": "This section will contain the list of expenses.",
"confirm_delete": "You will not be able to recover this Expense | You will not be able to recover these Expenses",
- "duplicate_expense": "Duplicate",
- "duplicate_expense_title": "Duplicate expense",
- "duplicate_expense_modal_hint": "Change the date if you need to. (copy) is added to the note.",
- "duplicated_message": "Expense duplicated successfully",
"created_message": "Expense created successfully",
"updated_message": "Expense updated successfully",
"deleted_message": "Expense deleted successfully | Expenses deleted successfully",
@@ -760,35 +775,61 @@
"no_modules_installed": "No Modules Installed Yet!",
"disable_warning": "All the settings for this particular will be reverted.",
"what_you_get": "What you get",
- "sign_up_and_get_token": "Sign up & Get Token"
+ "screenshots": "Screenshots",
+ "sign_up_and_get_token": "Sign up & Get Token",
+ "index": {
+ "description": "Modules activated by your administrator on this instance. Each company configures its own settings independently.",
+ "empty_title": "No active modules",
+ "empty_description": "Your administrator hasn't activated any modules on this instance yet. Once they do, modules will appear here with a settings shortcut."
+ },
+ "settings": {
+ "title": "Module Settings",
+ "open": "Settings",
+ "saved": "Module settings saved successfully.",
+ "not_found": "This module has not registered a settings schema.",
+ "none": "No settings"
+ },
+ "sidebar": {
+ "section_title": "Modules"
+ }
},
- "users": {
- "title": "Users",
- "users_list": "Users List",
+ "members": {
+ "title": "Members",
+ "members_list": "Members List",
"name": "Name",
"description": "Description",
"added_on": "Added On",
"date_of_creation": "Date Of Creation",
"action": "Action",
- "add_user": "Add User",
- "save_user": "Save User",
- "update_user": "Update User",
- "user": "User | Users",
- "add_new_user": "Add New User",
- "new_user": "New User",
- "edit_user": "Edit User",
- "no_users": "No users yet!",
- "list_of_users": "This section will contain the list of users.",
+ "invite_member": "Invite Member",
+ "select_role": "Select Role",
+ "add_member": "Add Member",
+ "save_member": "Save Member",
+ "update_member": "Update Member",
+ "member": "Member | Members",
+ "add_new_member": "Add New Member",
+ "new_member": "New Member",
+ "edit_member": "Edit Member",
+ "no_members": "No members yet!",
+ "list_of_members": "This section will contain the list of company members.",
"email": "Email",
"phone": "Phone",
"password": "Password",
- "user_attached_message": "Cannot delete an item which is already in use",
- "confirm_delete": "You will not be able to recover this User | You will not be able to recover these Users",
- "created_message": "User created successfully",
- "updated_message": "User updated successfully",
- "deleted_message": "User deleted successfully | Users deleted successfully",
+ "member_attached_message": "Cannot delete an item which is already in use",
+ "confirm_delete": "You will not be able to recover this Member | You will not be able to recover these Members",
+ "created_message": "Member added successfully",
+ "updated_message": "Member updated successfully",
+ "deleted_message": "Member removed successfully | Members removed successfully",
+ "invited_message": "Invitation sent successfully",
+ "invitation_cancelled": "Invitation cancelled",
"select_company_role": "Select Role for {company}",
- "companies": "Companies"
+ "companies": "Companies",
+ "pending_invitations": "Pending Invitations",
+ "no_pending_invitations": "No pending invitations",
+ "cancel_invitation": "Cancel Invitation",
+ "role": "Role",
+ "invited_by": "Invited By",
+ "sent_at": "Sent At"
},
"reports": {
"title": "Report",
@@ -867,12 +908,65 @@
"update_app": "Update App",
"backup": "Backup",
"file_disk": "File Disk",
+ "fonts": "Font Packages",
"custom_fields": "Custom Fields",
"payment_modes": "Payment Modes",
"notes": "Notes",
"exchange_rate": "Exchange Rate",
"address_information": "Address Information",
- "pdf_generation": "PDF Generation"
+ "pdf_generation": "PDF Generation",
+ "appearance": "Appearance",
+ "module_configuration": "Module Configuration",
+ "ai_configuration": "AI Configuration"
+ },
+ "appearance": {
+ "title": "Appearance",
+ "description": "Customize how the application looks and feels.",
+ "sidebar_group_labels": "Show sidebar group labels",
+ "sidebar_group_labels_desc": "Display section headers like Documents, Administration, and Modules in the sidebar navigation."
+ },
+ "ai": {
+ "title": "AI Configuration",
+ "description": "Configure the AI provider used for chat assistance and text generation. AI is opt-in — leave disabled if you don't want these features.",
+ "openrouter": "OpenRouter",
+ "enable": "Enable AI features",
+ "enable_help": "When disabled, the AI chat drawer and WYSIWYG text-generation button are hidden everywhere in the app.",
+ "driver": "AI Provider",
+ "api_key": "API Key",
+ "api_key_help": "Your API key is encrypted before being stored.",
+ "base_url": "Base URL",
+ "base_url_help": "Leave blank to use the provider's default endpoint.",
+ "roles": "AI Roles",
+ "roles_help": "Pick which AI capabilities are available. Each role uses a specific model.",
+ "chat": "Chat Assistant",
+ "chat_help": "Natural-language Q&A over your company's data via tool-calling.",
+ "chat_model": "Chat model",
+ "text_generation": "Text Generation",
+ "text_generation_help": "One-shot text generation for invoice notes and email bodies.",
+ "text_generation_model": "Text generation model",
+ "suggested_models": "Suggested models",
+ "test_connection": "Test Connection",
+ "test_success": "Connection successful.",
+ "test_failed": "Connection test failed: {error}",
+ "saved": "AI configuration saved successfully.",
+ "use_custom_ai_config": "Use custom AI configuration",
+ "use_custom_ai_config_desc": "Enable this to override the global AI configuration for this company.",
+ "using_global_ai_config": "This company is using the global AI configuration. Enable the toggle above to configure a custom provider.",
+ "company_enabled": "AI enabled for this company",
+ "company_enabled_desc": "Turn off to disable all AI features for this company regardless of the global setting.",
+ "installer_title": "AI Assistant",
+ "installer_description": "Optionally enable AI chat and text generation now. You can change this later in Admin → Settings → AI Configuration.",
+ "errors": {
+ "invalid_key": "The API key is invalid.",
+ "rate_limited": "The provider rate limit was hit. Please try again shortly.",
+ "server_error": "The AI provider returned an error. Check your configuration and try again.",
+ "model_not_found": "The requested model is not available on this provider.",
+ "missing_api_key": "An API key is required to test the connection.",
+ "ai_disabled": "AI is not enabled for this company.",
+ "chat_disabled": "The chat assistant is not enabled for this company.",
+ "text_generation_disabled": "Text generation is not enabled for this company.",
+ "missing_model": "No model is configured."
+ }
},
"address_information": {
"section_description": " You can update Your Address information using form below."
@@ -908,19 +1002,48 @@
"port": "Mail Port",
"driver": "Mail Driver",
"secret": "Secret",
+ "scheme": "Scheme",
+ "url": "URL",
+ "timeout": "Timeout",
+ "local_domain": "EHLO Domain",
"mailgun_secret": "Mailgun Secret",
"mailgun_domain": "Domain",
"mailgun_endpoint": "Mailgun Endpoint",
+ "mailgun_scheme": "Mailgun Scheme",
"ses_secret": "SES Secret",
"ses_key": "SES Key",
"ses_region": "AWS Region",
+ "postmark_token": "Postmark Token",
+ "postmark_message_stream_id": "Message Stream ID",
+ "sendmail_path": "Sendmail Path",
"password": "Mail Password",
"username": "Mail Username",
"mail_config": "Mail Configuration",
+ "mail_config_updated": "Mail configuration updated successfully",
"from_name": "From Mail Name",
"from_mail": "From Mail Address",
"encryption": "Mail Encryption",
- "mail_config_desc": "Below is the form for Configuring Email driver for sending emails from the app. You can also configure third party providers like Sendgrid, SES etc."
+ "mail_config_desc": "Below is the form for Configuring Email driver for sending emails from the app. You can also configure third party providers like Sendgrid, SES etc.",
+ "company_mail_config": "Mail Configuration",
+ "company_mail_config_desc": "Configure a custom mail driver for this company. When enabled, this overrides the global mail configuration.",
+ "company_mail_config_updated": "Company mail configuration updated successfully",
+ "use_custom_mail_config": "Use Custom Mail Configuration",
+ "use_custom_mail_config_desc": "Enable this to use a company-specific mail configuration instead of the global settings.",
+ "using_global_mail_config": "This company is using the global mail configuration. Enable the toggle above to configure a custom mail driver.",
+ "basic_settings": "Basic Settings",
+ "advanced_settings": "Advanced Settings",
+ "show_advanced_settings": "Show Advanced Settings",
+ "hide_advanced_settings": "Hide Advanced Settings",
+ "native_mail_desc": "Use PHP's native mail transport. Delivery is handled by the server's PHP mail configuration.",
+ "sendmail_desc": "Use the system sendmail binary for delivery. You can override the command path in Advanced Settings.",
+ "drivers": {
+ "smtp": "SMTP",
+ "mail": "PHP Mail",
+ "sendmail": "Sendmail",
+ "ses": "Amazon SES",
+ "mailgun": "Mailgun",
+ "postmark": "Postmark"
+ }
},
"pdf": {
"title": "PDF Setting",
@@ -953,6 +1076,7 @@
"updated_message": "Company information updated successfully",
"delete_company": "Delete Company",
"delete_company_description": "Once you delete your company, you will lose all the data and files associated with it permanently.",
+ "danger_zone": "Danger Zone",
"are_you_absolutely_sure": "Are you absolutely sure?",
"delete_company_modal_desc": "This action cannot be undone. This will permanently delete {company} and all of its associated data.",
"delete_company_modal_label": "Please type {company} to confirm"
@@ -1141,9 +1265,15 @@
"password": "Password",
"confirm_password": "Confirm Password",
"account_settings": "Account Settings",
+ "general": "General",
+ "general_description": "Update your name, email and language preference.",
+ "security": "Security",
+ "security_description": "Change your password.",
+ "profile_picture_description": "Upload or remove your profile photo.",
"save": "Save",
"section_description": "You can update your name, email & password using the form below.",
- "updated_message": "Account Settings updated successfully"
+ "updated_message": "Account Settings updated successfully",
+ "default_language": "Default (Company Language)"
},
"user_profile": {
"name": "Name",
@@ -1168,6 +1298,7 @@
"description": "Manage the roles & permissions of this company",
"save": "Save",
"add_new_role": "Add New Role",
+ "system_role": "System Role",
"role_name": "Role Name",
"added_on": "Added on",
"add_role": "Add Role",
@@ -1315,6 +1446,19 @@
"december_november": "December - November"
}
},
+ "fonts": {
+ "title": "Font Packages",
+ "description": "These font packages are used exclusively when generating PDF documents. The bundled Noto Sans covers Latin, Greek and Cyrillic scripts. Install the packages below to render Hebrew, Arabic, Persian, Urdu, Hindi (Devanagari), Thai or East Asian (CJK) characters in your PDFs.",
+ "bundled_info": "Bundled font: Noto Sans (Latin / Greek / Cyrillic). Install additional packages below for Hebrew, Arabic, Persian, Hindi, Thai or CJK support.",
+ "installed": "Installed",
+ "bundled": "Bundled",
+ "install": "Install",
+ "downloading": "Downloading...",
+ "download_started": "Downloading {name}. This may take a moment.",
+ "download_complete": "{name} installed successfully. PDFs will now use this font.",
+ "download_failed": "Failed to download {name}. Please try again.",
+ "no_packages": "No additional font packages available."
+ },
"update_app": {
"title": "Update App",
"description": "You can easily update InvoiceShelf by checking for a new update by clicking the button below",
@@ -1333,6 +1477,7 @@
"unzipping_package": "Unzipping Package",
"copying_files": "Copying Files",
"deleting_files": "Deleting Unused files",
+ "cleaning_stale_files": "Cleaning stale files",
"running_migrations": "Running Migrations",
"finishing_update": "Finishing Update",
"update_failed": "Update Failed",
@@ -1425,7 +1570,18 @@
"deleted_message": "File Disk deleted successfully",
"disk_variables_save_successfully": "Disk Configured Successfully",
"disk_variables_save_error": "Disk configuration failed.",
- "invalid_disk_credentials": "Invalid credential of selected disk"
+ "invalid_disk_credentials": "Invalid credential of selected disk",
+ "disk_assignments": "Disk Assignments",
+ "disk_assignments_description": "Configure which disk is used for different types of file storage.",
+ "media_storage": "Media Storage",
+ "media_storage_description": "Used for expense receipts, avatars, and company logos.",
+ "pdf_storage": "PDF Storage",
+ "pdf_storage_description": "Used for generated invoice, estimate, and payment PDFs.",
+ "backup_storage": "Backup Storage",
+ "backup_storage_description": "Used for application backups.",
+ "purposes_saved": "Disk assignments saved successfully",
+ "local_root_hint": "Path is relative to storage/app/. For example, entering \"backups\" will store files in storage/app/backups/.",
+ "change_disk_warning": "Changing disk assignments will only affect new uploads. Existing files will remain on their original disk and will continue to be accessible. If you need to move existing files, use the command: php artisan media:secure"
},
"taxations": {
"add_billing_address": "Enter Billing Address",
@@ -1491,6 +1647,7 @@
"db_name": "Database Name",
"db_path": "Database Path",
"overwrite": "Overwrite existing database and proceed",
+ "overwrite_confirm_desc": "This will permanently wipe the selected database before installation continues. Make sure you do not need any existing data.",
"desc": "Create a database on your server and set the credentials using the form below."
},
"permissions": {
@@ -1520,18 +1677,41 @@
"port": "Mail Port",
"driver": "Mail Driver",
"secret": "Secret",
+ "scheme": "Scheme",
+ "url": "URL",
+ "timeout": "Timeout",
+ "local_domain": "EHLO Domain",
"mailgun_secret": "Mailgun Secret",
"mailgun_domain": "Domain",
"mailgun_endpoint": "Mailgun Endpoint",
+ "mailgun_scheme": "Mailgun Scheme",
"ses_secret": "SES Secret",
+ "ses_region": "AWS Region",
"ses_key": "SES Key",
+ "postmark_token": "Postmark Token",
+ "postmark_message_stream_id": "Message Stream ID",
+ "sendmail_path": "Sendmail Path",
"password": "Mail Password",
"username": "Mail Username",
"mail_config": "Mail Configuration",
"from_name": "From Mail Name",
"from_mail": "From Mail Address",
"encryption": "Mail Encryption",
- "mail_config_desc": "Below is the form for Configuring Email driver for sending emails from the app. You can also configure third party providers like Sendgrid, SES etc."
+ "mail_config_desc": "Below is the form for Configuring Email driver for sending emails from the app. You can also configure third party providers like Sendgrid, SES etc.",
+ "basic_settings": "Basic Settings",
+ "advanced_settings": "Advanced Settings",
+ "show_advanced_settings": "Show Advanced Settings",
+ "hide_advanced_settings": "Hide Advanced Settings",
+ "native_mail_desc": "Use PHP's native mail transport. Delivery is handled by the server's PHP mail configuration.",
+ "sendmail_desc": "Use the system sendmail binary for delivery. You can override the command path in Advanced Settings.",
+ "drivers": {
+ "smtp": "SMTP",
+ "mail": "PHP Mail",
+ "sendmail": "Sendmail",
+ "ses": "Amazon SES",
+ "mailgun": "Mailgun",
+ "postmark": "Postmark"
+ }
},
"req": {
"system_req": "System Requirements",
@@ -1677,5 +1857,57 @@
"mail_view_payment": "View Payment",
"notification_view_estimate": "[Notification] Estimate viewed",
"notification_view_invoice": "[Notification] Invoice viewed",
- "You have received a new invoice from {COMPANY_NAME}. Please download using the button below:": "You have received a new invoice from {COMPANY_NAME}. Please download using the button below:"
+ "You have received a new invoice from {COMPANY_NAME}. Please download using the button below:": "You have received a new invoice from {COMPANY_NAME}. Please download using the button below:",
+ "administration": {
+ "companies": {
+ "title": "All Companies",
+ "edit_company": "Edit Company",
+ "company_name": "Company Name",
+ "owner": "Owner",
+ "address": "Address",
+ "updated_message": "Company updated successfully",
+ "no_companies": "No companies found",
+ "list_description": "Manage all companies across the system"
+ },
+ "settings": {
+ "title": "Global Settings"
+ },
+ "users": {
+ "title": "All Users",
+ "edit_user": "Edit User",
+ "role": "Role",
+ "no_users": "No users found",
+ "list_description": "View all users across the system",
+ "updated_message": "User updated successfully",
+ "impersonate": "Impersonate",
+ "impersonate_confirm": "You are about to impersonate {name}. You will be logged in as this user with a temporary session that expires in 2 hours. This action is logged.",
+ "impersonating_banner": "You are currently impersonating a user. All actions are logged.",
+ "stop_impersonating": "Stop Impersonating"
+ }
+ },
+ "ai": {
+ "chat": {
+ "title": "AI Assistant",
+ "new_conversation": "New conversation",
+ "no_conversations": "No conversations yet.",
+ "untitled": "Untitled",
+ "empty_state": "Ask me anything about your invoices, customers, payments, or expenses.",
+ "thinking": "Thinking…",
+ "send": "Send",
+ "sending": "Sending…",
+ "input_placeholder": "Ask about your invoices, customers, or payments…"
+ },
+ "generate": {
+ "title": "AI Text Generation",
+ "prompt_label": "What should the AI write?",
+ "prompt_placeholder": "e.g. a polite late-payment reminder for an invoice that's 10 days overdue",
+ "use_current_as_context": "Use current content as context",
+ "use_context_help": "When enabled, the AI will see the editor's current text and can rewrite or extend it.",
+ "preview": "Preview",
+ "generate": "Generate",
+ "regenerate": "Regenerate",
+ "insert": "Insert",
+ "replace": "Replace"
+ }
+ }
}