diff --git a/lang/sr.json b/lang/sr.json index 557e0a11..fa1cf85d 100644 --- a/lang/sr.json +++ b/lang/sr.json @@ -12,7 +12,13 @@ "settings": "Podešavanja", "logout": "Odjavi se", "users": "Korisnici", - "modules": "Modules" + "members": "Members", + "modules": "Modules", + "documents": "Documents", + "admin": "Administration", + "administration": "Administration", + "companies": "Companies", + "all_users": "Users" }, "general": { "add_company": "Dodaj kompaniju", @@ -22,15 +28,16 @@ "save": "Sačuvaj", "create": "Napravi", "cancel": "Otkaži", + "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": "Ažuriraj", "deselect": "Poništi izbor", "download": "Preuzmi", - "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": "Od Datuma", "to_date": "Do Datuma", "from": "Pošiljalac", @@ -97,6 +104,7 @@ "street_2": "Adresa 2", "action_failed": "Akcija nije uspela", "retry": "Pokušaj ponovo", + "unable_to_load_pdf": "Unable to load document preview", "choose_note": "Odaberi napomenu", "no_note_found": "Ne postoje sačuvane napomene", "insert_note": "Unesi belešku", @@ -262,7 +270,7 @@ "confirm_delete": "Nećeš moći da povratiš ovog klijenta i sve njegove Fakture, Profakture i Uplate. | Nećeš moći da povratiš ove klijente i njihove Fakture, Profakture i Uplate.", "created_message": "Klijent uspešno kreiran", "updated_message": "Klijent uspešno ažuriran", - "address_updated_message": "", + "address_updated_message": "Address Information Updated succesfully", "deleted_message": "Klijent uspešno obrisan | Klijenti uspešno obrisani", "edit_currency_not_allowed": "Nije moguće promeniti valutu nakon što su transakcije već kreirane." }, @@ -446,6 +454,7 @@ "update_expense": "Ažuriraj Rashod", "edit_invoice": "Izmeni Fakturu", "new_invoice": "Nova Faktura", + "one_time": "One-time", "save_invoice": "Sačuvaj Fakturu", "update_invoice": "Ažuriraj Fakturu", "add_new_tax": "Dodaj nov Porez", @@ -460,6 +469,8 @@ "cloned_successfully": "Uspešno napravljen duplikat Fakture", "clone_invoice": "Napravi duplikat", "confirm_clone": "Ova Faktura će biti duplikat nove Fakture", + "convert_to_estimate": "Convert to Estimate", + "confirm_convert_to_estimate": "This invoice will be converted into a new Estimate", "item": { "title": "Naziv Stavke", "description": "Opis", @@ -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": "Uplate", @@ -683,10 +702,6 @@ "no_expenses": "Još uvek nema rashoda!", "list_of_expenses": "Ova sekcija će da sadrži listu rashoda.", "confirm_delete": "Nećeš moći da povratiš ovaj Rashod | Nećeš moći da povratiš ove Rashode", - "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": "Rashod uspešno kreiran", "updated_message": "Rashod uspešno ažuriran", "deleted_message": "Rashod uspešno obrisan | Rashodi uspešno obrisani", @@ -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": "Korisnici", - "users_list": "Lista korisnika", - "name": "Ime i prezime", - "description": "Opis", - "added_on": "Datum dodavanja", - "date_of_creation": "Datum kreiranja", - "action": "Akcija", - "add_user": "Dodaj Korisnika", - "save_user": "Sačuvaj Korisnika", - "update_user": "Ažuriraj Korisnika", - "user": "Korisnik | Korisnici", - "add_new_user": "Dodaj novog korisnika", - "new_user": "Nov Korisnik", - "edit_user": "Izmeni Korisnika", - "no_users": "Još uvek nema korisnika!", - "list_of_users": "Ova sekcija će da sadrži listu korisnika.", - "email": "E-mail", - "phone": "Broj telefona", - "password": "Šifra", - "user_attached_message": "Ne možete obrisati stavku koja je već u upotrebi", - "confirm_delete": "Nećeš moći da povratiš ovog Korisnika | Nećeš moći da povratiš ove Korisnike", - "created_message": "Korisnik uspešno napravljen", - "updated_message": "Korisnik uspešno ažuriran", - "deleted_message": "Korisnik uspešno obrisan | Korisnici uspešno obrisani", + "members": { + "title": "Members", + "members_list": "Members List", + "name": "Name", + "description": "Description", + "added_on": "Added On", + "date_of_creation": "Date Of Creation", + "action": "Action", + "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", + "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": "Izveštaj", @@ -867,12 +908,65 @@ "update_app": "Ažuriraj Aplikaciju", "backup": "Bekap", "file_disk": "File Disk", + "fonts": "Font Packages", "custom_fields": "Prilagođena polja", "payment_modes": "Način plaćanja", "notes": "Napomene", "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 drajver", "secret": "Šifra", + "scheme": "Scheme", + "url": "URL", + "timeout": "Timeout", + "local_domain": "EHLO Domain", "mailgun_secret": "Mailgun Šifra", "mailgun_domain": "Domen", "mailgun_endpoint": "Mailgun Endpoint", + "mailgun_scheme": "Mailgun Scheme", "ses_secret": "SES Šifra", "ses_key": "SES Ključ", "ses_region": "AWS Region", + "postmark_token": "Postmark Token", + "postmark_message_stream_id": "Message Stream ID", + "sendmail_path": "Sendmail Path", "password": "Mail Šifra", "username": "Mail Korisničko Ime", "mail_config": "Mail Podešavanje", + "mail_config_updated": "Mail configuration updated successfully", "from_name": "Naziv pošiljaoca", "from_mail": "E-mail adresa pošiljaoca", "encryption": "E-mail enkripcija", - "mail_config_desc": "Ispod se nalazi forma za podešavanje E-mail drajvera za slanje pošte iz aplikacije. Takođe možete podesiti provajdere treće strane kao Sendgrid, SES itd." + "mail_config_desc": "Ispod se nalazi forma za podešavanje E-mail drajvera za slanje pošte iz aplikacije. Takođe možete podesiti provajdere treće strane kao Sendgrid, SES itd.", + "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 Podešavanje", @@ -953,6 +1076,7 @@ "updated_message": "Podaci o firmi uspešno sačuvani", "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": "Šifra", "confirm_password": "Potvrdi šifru", "account_settings": "Podešavanje naloga", + "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": "Sačuvaj", "section_description": "Možete ažurirati Vaše ime i prezime, email, šifru koristeći formu ispod.", - "updated_message": "Podešavanje naloga uspešno ažurirano" + "updated_message": "Podešavanje naloga uspešno ažurirano", + "default_language": "Default (Company Language)" }, "user_profile": { "name": "Ime i prezime", @@ -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": "Ažuriraj aplikaciju", "description": "Lako možeš da ažuriraš InvoiceShelf tako što ćeš uraditi proveru novih verzija klikom na polje ispod", @@ -1333,6 +1477,7 @@ "unzipping_package": "Raspakivanje paketa", "copying_files": "Kopiranje datoteka", "deleting_files": "Brisanje fajlova koji nisu u upotrebi", + "cleaning_stale_files": "Cleaning stale files", "running_migrations": "Migracije u toku", "finishing_update": "Završavanje ažuriranja", "update_failed": "Neuspešno ažuriranje", @@ -1425,7 +1570,18 @@ "deleted_message": "File Disk uspešno obrisan", "disk_variables_save_successfully": "Disk uspešno podešen", "disk_variables_save_error": "Podešavanje diska nije uspelo.", - "invalid_disk_credentials": "Pogrešan kredencijal za disk koji je naveden" + "invalid_disk_credentials": "Pogrešan kredencijal za disk koji je naveden", + "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": "Naziv baze podataka", "db_path": "Putanja do baze", "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": "Kreiraj bazu podataka na svom serveru i postavi kredencijale prateći obrazac u nastavku." }, "permissions": { @@ -1520,18 +1677,41 @@ "port": "Mail Port", "driver": "Mail drajver", "secret": "Šifra", + "scheme": "Scheme", + "url": "URL", + "timeout": "Timeout", + "local_domain": "EHLO Domain", "mailgun_secret": "Mailgun Šifra", "mailgun_domain": "Domen", "mailgun_endpoint": "Mailgun Endpoint", + "mailgun_scheme": "Mailgun Scheme", "ses_secret": "SES Šifra", + "ses_region": "AWS Region", "ses_key": "SES Ključ", + "postmark_token": "Postmark Token", + "postmark_message_stream_id": "Message Stream ID", + "sendmail_path": "Sendmail Path", "password": "Šifra za e-mail", "username": "Koristničko ime za e-mail", "mail_config": "E-mail konfigurisanje", "from_name": "Naziv pošiljaoca", "from_mail": "E-mail adresa pošiljaoca", "encryption": "E-mail enkripcija", - "mail_config_desc": "Ispod se nalazi forma za podešavanje E-mail drajvera za slanje pošte iz aplikacije. Takođe možete podesiti provajdere treće strane kao Sendgrid, SES itd." + "mail_config_desc": "Ispod se nalazi forma za podešavanje E-mail drajvera za slanje pošte iz aplikacije. Takođe možete podesiti provajdere treće strane kao Sendgrid, SES itd.", + "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": "Sistemski zahtevi", @@ -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" + } + } }