diff --git a/VERSION.txt b/VERSION.txt index 184f305de134..9a532528f270 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1 +1 @@ -5.5.10 \ No newline at end of file +5.5.11 \ No newline at end of file diff --git a/app/Console/Commands/SendRemindersCron.php b/app/Console/Commands/SendRemindersCron.php index cdbdad6b37ab..81e20ec819b3 100644 --- a/app/Console/Commands/SendRemindersCron.php +++ b/app/Console/Commands/SendRemindersCron.php @@ -166,7 +166,7 @@ class SendRemindersCron extends Command $invoice_item = new InvoiceItem; $invoice_item->type_id = '5'; - $invoice_item->product_key = trans('texts.fee'); + $invoice_item->product_key = ctrans('texts.fee'); $invoice_item->notes = ctrans('texts.late_fee_added', ['date' => $this->translateDate(now()->startOfDay(), $invoice->client->date_format(), $invoice->client->locale())]); $invoice_item->quantity = 1; $invoice_item->cost = $fee; diff --git a/app/Import/Transformer/BaseTransformer.php b/app/Import/Transformer/BaseTransformer.php index ee9c47b537de..6072feacbb09 100644 --- a/app/Import/Transformer/BaseTransformer.php +++ b/app/Import/Transformer/BaseTransformer.php @@ -65,6 +65,7 @@ class BaseTransformer public function getClient($client_name, $client_email) { + if (! empty($client_name)) { $client_id_search = $this->company ->clients() diff --git a/app/Import/Transformer/Zoho/ClientTransformer.php b/app/Import/Transformer/Zoho/ClientTransformer.php index 617048ef8712..ef423e54fd53 100644 --- a/app/Import/Transformer/Zoho/ClientTransformer.php +++ b/app/Import/Transformer/Zoho/ClientTransformer.php @@ -38,13 +38,15 @@ class ClientTransformer extends BaseTransformer $settings->payment_terms = $data['Payment Terms']; } + $client_id_proxy = array_key_exists('Customer ID', $data) ? 'Customer ID' : 'Primary Contact ID'; + return [ 'company_id' => $this->company->id, - 'name' => $this->getString($data, 'Company Name'), + 'name' => $this->getString($data, 'Display Name'), 'phone' => $this->getString($data, 'Phone'), 'private_notes' => $this->getString($data, 'Notes'), 'website' => $this->getString($data, 'Website'), - 'id_number' => $this->getString($data, 'Customer ID'), + 'id_number' => $this->getString($data, $client_id_proxy), 'address1' => $this->getString($data, 'Billing Address'), 'address2' => $this->getString($data, 'Billing Street2'), 'city' => $this->getString($data, 'Billing City'), diff --git a/app/Import/Transformer/Zoho/InvoiceTransformer.php b/app/Import/Transformer/Zoho/InvoiceTransformer.php index ea29d6c825c4..90f7f28c7bd5 100644 --- a/app/Import/Transformer/Zoho/InvoiceTransformer.php +++ b/app/Import/Transformer/Zoho/InvoiceTransformer.php @@ -40,7 +40,7 @@ class InvoiceTransformer extends BaseTransformer $transformed = [ 'company_id' => $this->company->id, - 'client_id' => $this->getClient($this->getString($invoice_data, 'Customer ID'), null), + 'client_id' => $this->getClient($this->getString($invoice_data, 'Customer ID'), $this->getString($invoice_data, 'Primary Contact EmailID')), 'number' => $this->getString($invoice_data, 'Invoice Number'), 'date' => isset($invoice_data['Invoice Date']) ? date('Y-m-d', strtotime($invoice_data['Invoice Date'])) : null, 'due_date' => isset($invoice_data['Due Date']) ? date('Y-m-d', strtotime($invoice_data['Due Date'])) : null, @@ -51,14 +51,19 @@ class InvoiceTransformer extends BaseTransformer 'balance' => $this->getFloat($invoice_data, 'Balance'), 'status_id' => $invoiceStatusMap[$status = strtolower($this->getString($invoice_data, 'Invoice Status'))] ?? Invoice::STATUS_SENT, + 'terms' => $this->getString($invoice_data, 'Terms & Conditions'), + // 'viewed' => $status === 'viewed', ]; $line_items = []; foreach ($line_items_data as $record) { + + $item_notes_key = array_key_exists('Item Description', $record) ? 'Item Description' : 'Item Desc'; + $line_items[] = [ 'product_key' => $this->getString($record, 'Item Name'), - 'notes' => $this->getString($record, 'Item Description'), + 'notes' => $this->getString($record, $item_notes_key), 'cost' => round($this->getFloat($record, 'Item Price'), 2), 'quantity' => $this->getFloat($record, 'Quantity'), 'discount' => $this->getString($record, 'Discount Amount'), diff --git a/app/Jobs/Mail/NinjaMailerJob.php b/app/Jobs/Mail/NinjaMailerJob.php index 598156ce711a..b157176b027c 100644 --- a/app/Jobs/Mail/NinjaMailerJob.php +++ b/app/Jobs/Mail/NinjaMailerJob.php @@ -102,6 +102,17 @@ class NinjaMailerJob implements ShouldQueue $this->nmo->mailable->tag($this->company->company_key); + if($this->nmo->invitation) + { + + $this->nmo + ->mailable + ->withSymfonyMessage(function ($message) { + $message->getHeaders()->addTextHeader('x-invitation', $this->nmo->invitation->key); + }); + + } + //send email try { nlog("trying to send to {$this->nmo->to_user->email} ". now()->toDateTimeString()); diff --git a/app/Jobs/PostMark/ProcessPostmarkWebhook.php b/app/Jobs/PostMark/ProcessPostmarkWebhook.php index 64b590ad0917..0dca3f00e727 100644 --- a/app/Jobs/PostMark/ProcessPostmarkWebhook.php +++ b/app/Jobs/PostMark/ProcessPostmarkWebhook.php @@ -26,6 +26,7 @@ use App\Models\Company; use App\Models\CreditInvitation; use App\Models\InvoiceInvitation; use App\Models\Payment; +use App\Models\PurchaseOrderInvitation; use App\Models\QuoteInvitation; use App\Models\RecurringInvoiceInvitation; use App\Models\SystemLog; @@ -283,6 +284,8 @@ class ProcessPostmarkWebhook implements ShouldQueue return $invitation; elseif($invitation = CreditInvitation::where('message_id', $message_id)->first()) return $invitation; + elseif($invitation = PurchaseOrderInvitation::where('message_id', $message_id)->first()) + return $invitation; else return $invitation; } diff --git a/app/Listeners/Mail/MailSentListener.php b/app/Listeners/Mail/MailSentListener.php index 7d52131bb551..e1a620c0e770 100644 --- a/app/Listeners/Mail/MailSentListener.php +++ b/app/Listeners/Mail/MailSentListener.php @@ -12,9 +12,15 @@ namespace App\Listeners\Mail; use App\Libraries\MultiDB; +use App\Models\CreditInvitation; +use App\Models\InvoiceInvitation; +use App\Models\PurchaseOrderInvitation; +use App\Models\QuoteInvitation; +use App\Models\RecurringInvoiceInvitation; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Mail\Events\MessageSent; use Illuminate\Support\Facades\Notification; +use Symfony\Component\Mime\MessageConverter; class MailSentListener implements ShouldQueue { @@ -35,19 +41,50 @@ class MailSentListener implements ShouldQueue */ public function handle(MessageSent $event) { - nlog("mail listener"); - nlog($event); - // if (property_exists($event->message, 'invitation') && $event->message->invitation) { - // MultiDB::setDb($event->sent->invitation->company->db); - // if ($event->message->getHeaders()->get('x-pm-message-id')) { - // $postmark_id = $event->sent->getHeaders()->get('x-pm-message-id')->getValue(); + $message_id = $event->sent->getMessageId(); + + $message = MessageConverter::toEmail($event->sent->getOriginalMessage()); + + $invitation_key = $message->getHeaders()->get('x-invitation')->getValue(); + + if($message_id && $invitation_key) + { + + $invitation = $this->discoverInvitation($invitation_key); + + if(!$invitation) + return; + + $invitation->message_id = $message_id; + $invitation->save(); + } - // // nlog($postmark_id); - // $invitation = $event->sent->invitation; - // $invitation->message_id = $postmark_id; - // $invitation->save(); - // } - // } } + + private function discoverInvitation($key) + { + + $invitation = false; + + foreach (MultiDB::$dbs as $db) + { + + if($invitation = InvoiceInvitation::on($db)->where('key', $key)->first()) + return $invitation; + elseif($invitation = QuoteInvitation::on($db)->where('key', $key)->first()) + return $invitation; + elseif($invitation = RecurringInvoiceInvitation::on($db)->where('key', $key)->first()) + return $invitation; + elseif($invitation = CreditInvitation::on($db)->where('key', $key)->first()) + return $invitation; + elseif($invitation = PurchaseOrderInvitation::on($db)->where('key', $key)->first()) + return $invitation; + + } + + return $invitation; + + } + } diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 495ebf41aadd..53bb69bbb4ca 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -271,9 +271,9 @@ class EventServiceProvider extends ServiceProvider ], MessageSending::class => [ ], - // MessageSent::class => [ - // MailSentListener::class, - // ], + MessageSent::class => [ + MailSentListener::class, + ], UserWasCreated::class => [ CreatedUserActivity::class, SendVerificationNotification::class, diff --git a/app/Services/PdfMaker/Design.php b/app/Services/PdfMaker/Design.php index b3b196d00de4..dec4e6518dbf 100644 --- a/app/Services/PdfMaker/Design.php +++ b/app/Services/PdfMaker/Design.php @@ -50,10 +50,8 @@ class Design extends BaseDesign /** Construct options */ public $options; - /** @var Invoice[] */ public $invoices; - /** @var Payment[] */ public $payments; public $settings_object; diff --git a/app/Services/Quote/ConvertQuote.php b/app/Services/Quote/ConvertQuote.php index 7d8347e79f18..e3ee0ebab9c5 100644 --- a/app/Services/Quote/ConvertQuote.php +++ b/app/Services/Quote/ConvertQuote.php @@ -80,7 +80,6 @@ class ConvertQuote /** * Only create the invitations that are defined on the quote. * - * @return Invoice $invoice */ private function createConversionInvitations($invoice, $quote) { diff --git a/app/Services/Quote/QuoteService.php b/app/Services/Quote/QuoteService.php index 8a8174c3ea4c..3a069ee1c75f 100644 --- a/app/Services/Quote/QuoteService.php +++ b/app/Services/Quote/QuoteService.php @@ -129,7 +129,8 @@ class QuoteService /** * Sometimes we need to refresh the * PDF when it is updated etc. - * @return InvoiceService + * + * @return QuoteService */ public function touchPdf($force = false) { diff --git a/app/Services/Subscription/SubscriptionService.php b/app/Services/Subscription/SubscriptionService.php index c4f3ff7bc260..7f74fcb9be46 100644 --- a/app/Services/Subscription/SubscriptionService.php +++ b/app/Services/Subscription/SubscriptionService.php @@ -840,7 +840,6 @@ class SubscriptionService * Get the single charge products for the * subscription * - * @return ?Product Collection */ public function products() { @@ -859,7 +858,6 @@ class SubscriptionService * Get the recurring products for the * subscription * - * @return ?Product Collection */ public function recurring_products() { diff --git a/app/Transformers/CompanyUserTransformer.php b/app/Transformers/CompanyUserTransformer.php index 720a247f7e30..82295aa3ee83 100644 --- a/app/Transformers/CompanyUserTransformer.php +++ b/app/Transformers/CompanyUserTransformer.php @@ -42,8 +42,8 @@ class CompanyUserTransformer extends EntityTransformer return [ 'permissions' => $company_user->permissions ?: '', - 'notifications' => (object) $company_user->notifications ?: $blank_obj, - 'settings' => (object) $company_user->settings ?: $blank_obj, + 'notifications' => $company_user->notifications ? (object) $company_user->notifications : $blank_obj, + 'settings' => $company_user->settings ? (object) $company_user->settings : $blank_obj, 'is_owner' => (bool) $company_user->is_owner, 'is_admin' => (bool) $company_user->is_admin, 'is_locked' => (bool) $company_user->is_locked, diff --git a/app/Transformers/CreditTransformer.php b/app/Transformers/CreditTransformer.php index 42e247d1c35a..6dc1b4ee9c8f 100644 --- a/app/Transformers/CreditTransformer.php +++ b/app/Transformers/CreditTransformer.php @@ -80,7 +80,6 @@ class CreditTransformer extends EntityTransformer 'amount' => (float) $credit->amount, 'balance' => (float) $credit->balance, 'client_id' => (string) $this->encodePrimaryKey($credit->client_id), - 'vendor_id' => (string) $this->encodePrimaryKey($credit->vendor_id), 'status_id' => (string) ($credit->status_id ?: 1), 'design_id' => (string) $this->encodePrimaryKey($credit->design_id), 'created_at' => (int) $credit->created_at, diff --git a/app/Transformers/RecurringInvoiceTransformer.php b/app/Transformers/RecurringInvoiceTransformer.php index b5db046192a0..57350a213238 100644 --- a/app/Transformers/RecurringInvoiceTransformer.php +++ b/app/Transformers/RecurringInvoiceTransformer.php @@ -137,7 +137,6 @@ class RecurringInvoiceTransformer extends EntityTransformer 'due_date_days' => (string) $invoice->due_date_days ?: '', 'paid_to_date' => (float) $invoice->paid_to_date, 'subscription_id' => (string) $this->encodePrimaryKey($invoice->subscription_id), - 'recurring_dates' => (array) [], ]; if (request()->has('show_dates') && request()->query('show_dates') == 'true') { diff --git a/config/ninja.php b/config/ninja.php index 7db45a89e570..286bbdc05d9f 100644 --- a/config/ninja.php +++ b/config/ninja.php @@ -14,8 +14,8 @@ return [ 'require_https' => env('REQUIRE_HTTPS', true), 'app_url' => rtrim(env('APP_URL', ''), '/'), 'app_domain' => env('APP_DOMAIN', 'invoicing.co'), - 'app_version' => '5.5.10', - 'app_tag' => '5.5.10', + 'app_version' => '5.5.11', + 'app_tag' => '5.5.11', 'minimum_client_version' => '5.0.16', 'terms_version' => '1.0.1', 'api_secret' => env('API_SECRET', ''), diff --git a/lang/en/texts.php b/lang/en/texts.php index 184dd7b7a385..52e3731eb41e 100644 --- a/lang/en/texts.php +++ b/lang/en/texts.php @@ -4730,6 +4730,43 @@ $LANG = array( 'converted_to_expenses' => 'Successfully converted to expenses', 'entity_removed' => 'This document has been removed, please contact the vendor for further information', 'entity_removed_title' => 'Document no longer available', + 'field' => 'Field', + 'period' => 'Period', + 'fields_per_row' => 'Fields Per Row', + 'total_active_invoices' => 'Active Invoices', + 'total_outstanding_invoices' => 'Outstanding Invoices', + 'total_completed_payments' => 'Completed Payments', + 'total_refunded_payments' => 'Refunded Payments', + 'total_active_quotes' => 'Active Quotes', + 'total_approved_quotes' => 'Approved Quotes', + 'total_unapproved_quotes' => 'Unapproved Quotes', + 'total_logged_tasks' => 'Logged Tasks', + 'total_invoiced_tasks' => 'Invoiced Tasks', + 'total_paid_tasks' => 'Paid Tasks', + 'total_logged_expenses' => 'Logged Expenses', + 'total_pending_expenses' => 'Pending Expenses', + 'total_invoiced_expenses' => 'Invoiced Expenses', + 'total_invoice_paid_expenses' => 'Invoice Paid Expenses', + 'vendor_portal' => 'Vendor Portal', + 'send_code' => 'Send Code', + 'save_to_upload_documents' => 'Save the record to upload documents', + 'expense_tax_rates' => 'Expense Tax Rates', + 'invoice_item_tax_rates' => 'Invoice Item Tax Rates', + 'verified_phone_number' => 'Successfully verified phone number', + 'code_was_sent' => 'A code has been sent via SMS', + 'resend' => 'Resend', + 'verify' => 'Verify', + 'enter_phone_number' => 'Please provide a phone number', + 'invalid_phone_number' => 'Invalid phone number', + 'verify_phone_number' => 'Verify Phone Number', + 'verify_phone_number_help' => 'Please verify your phone number to send emails', + 'merged_clients' => 'Successfully merged clients', + 'merge_into' => 'Merge Into', + 'php81_required' => 'Note: v5.5 requires PHP 8.1', + 'bulk_email_purchase_orders' => 'Email Purchase Orders', + 'bulk_email_invoices' => 'Email Invoices', + 'bulk_email_quotes' => 'Email Quotes', + 'bulk_email_credits' => 'Email Credits', ); return $LANG; diff --git a/lang/pt_BR/texts.php b/lang/pt_BR/texts.php index c62b4ae41eec..c86c1591b2f0 100644 --- a/lang/pt_BR/texts.php +++ b/lang/pt_BR/texts.php @@ -200,7 +200,7 @@ $LANG = array( 'removed_logo' => 'Logotipo removido com sucesso', 'sent_message' => 'Mensagem enviada com sucesso', 'invoice_error' => 'Assegure-se de selecionar um cliente e corrigir quaisquer erros', - 'limit_clients' => 'Desculpe, isto irá exceder o limite de :count clientes', + 'limit_clients' => 'Sorry, this will exceed the limit of :count clients. Please upgrade to a paid plan.', 'payment_error' => 'Ocorreu um erro ao processar seu pagamento. Por favor tente novamente mais tarde.', 'registration_required' => 'Favor cadastre-se para enviar uma fatura por email', 'confirmation_required' => 'Por favor confirme seu endereço de email, :link para re-enviar o email de confirmação.', @@ -2241,7 +2241,7 @@ Quando tiver as quantias, volte a esta página de formas de pagamento e clique " 'navigation_variables' => 'Variáveis de Navegação', 'custom_variables' => 'Variáveis Personalizadas', 'invalid_file' => 'Tipo de arquivo inválido', - 'add_documents_to_invoice' => 'Adicionar documentos à fatura', + 'add_documents_to_invoice' => 'Add Documents to Invoice', 'mark_expense_paid' => 'Marcar como pago', 'white_label_license_error' => 'Falha ao validar a licença, verifique storage/logs/laravel-error.log para mais detalhes.', 'plan_price' => 'Preço do Plano', @@ -4628,6 +4628,102 @@ Quando tiver as quantias, volte a esta página de formas de pagamento e clique " 'notification_purchase_order_accepted_subject' => 'Purchase Order :purchase_order was accepted by :vendor', 'notification_purchase_order_accepted' => 'The following vendor :vendor accepted Purchase Order :purchase_order for :amount.', 'amount_received' => 'Amount received', + 'purchase_order_already_expensed' => 'Already converted to an expense.', + 'convert_to_expense' => 'Convert to Expense', + 'add_to_inventory' => 'Add to Inventory', + 'added_purchase_order_to_inventory' => 'Successfully added purchase order to inventory', + 'added_purchase_orders_to_inventory' => 'Successfully added purchase orders to inventory', + 'client_document_upload' => 'Client Document Upload', + 'vendor_document_upload' => 'Vendor Document Upload', + 'vendor_document_upload_help' => 'Enable vendors to upload documents', + 'are_you_enjoying_the_app' => 'Are you enjoying the app?', + 'yes_its_great' => 'Yes, it"s great!', + 'not_so_much' => 'Not so much', + 'would_you_rate_it' => 'Great to hear! Would you like to rate it?', + 'would_you_tell_us_more' => 'Sorry to hear it! Would you like to tell us more?', + 'sure_happy_to' => 'Sure, happy to', + 'no_not_now' => 'No, not now', + 'add' => 'Add', + 'last_sent_template' => 'Last Sent Template', + 'enable_flexible_search' => 'Enable Flexible Search', + 'enable_flexible_search_help' => 'Match non-contiguous characters, ie. "ct" matches "cat"', + 'vendor_details' => 'Vendor Details', + 'purchase_order_details' => 'Purchase Order Details', + 'qr_iban' => 'QR IBAN', + 'besr_id' => 'BESR ID', + 'clone_to_purchase_order' => 'Clone to PO', + 'vendor_email_not_set' => 'Vendor does not have an email address set', + 'bulk_send_email' => 'Send Email', + 'marked_purchase_order_as_sent' => 'Successfully marked purchase order as sent', + 'marked_purchase_orders_as_sent' => 'Successfully marked purchase orders as sent', + 'accepted_purchase_order' => 'Successfully accepted purchase order', + 'accepted_purchase_orders' => 'Successfully accepted purchase orders', + 'cancelled_purchase_order' => 'Successfully cancelled purchase order', + 'cancelled_purchase_orders' => 'Successfully cancelled purchase orders', + 'please_select_a_vendor' => 'Please select a vendor', + 'purchase_order_total' => 'Purchase Order Total', + 'email_purchase_order' => 'Email Purchase Order', + 'bulk_email_purchase_order' => 'Email Purchase Order', + 'disconnected_email' => 'Successfully disconnected email', + 'connect_email' => 'Connect Email', + 'disconnect_email' => 'Disconnect Email', + 'use_web_app_to_connect_microsoft' => 'Please use the web app to connect to Microsoft', + 'email_provider' => 'Email Provider', + 'connect_microsoft' => 'Connect Microsoft', + 'disconnect_microsoft' => 'Disconnect Microsoft', + 'connected_microsoft' => 'Successfully connected Microsoft', + 'disconnected_microsoft' => 'Successfully disconnected Microsoft', + 'microsoft_sign_in' => 'Login with Microsoft', + 'microsoft_sign_up' => 'Sign up with Microsoft', + 'emailed_purchase_order' => 'Successfully queued purchase order to be sent', + 'emailed_purchase_orders' => 'Successfully queued purchase orders to be sent', + 'enable_react_app' => 'Change to the React web app', + 'purchase_order_design' => 'Purchase Order Design', + 'purchase_order_terms' => 'Purchase Order Terms', + 'purchase_order_footer' => 'Purchase Order Footer', + 'require_purchase_order_signature' => 'Purchase Order Signature', + 'require_purchase_order_signature_help' => 'Require vendor to provide their signature.', + 'new_purchase_order' => 'New Purchase Order', + 'edit_purchase_order' => 'Edit Purchase Order', + 'created_purchase_order' => 'Successfully created purchase order', + 'updated_purchase_order' => 'Successfully updated purchase order', + 'archived_purchase_order' => 'Successfully archived purchase order', + 'deleted_purchase_order' => 'Successfully deleted purchase order', + 'removed_purchase_order' => 'Successfully removed purchase order', + 'restored_purchase_order' => 'Successfully restored purchase order', + 'search_purchase_order' => 'Search Purchase Order', + 'search_purchase_orders' => 'Search Purchase Orders', + 'login_url' => 'Login URL', + 'enable_applying_payments' => 'Enable Applying Payments', + 'enable_applying_payments_help' => 'Support separately creating and applying payments', + 'stock_quantity' => 'Stock Quantity', + 'notification_threshold' => 'Notification Threshold', + 'track_inventory' => 'Track Inventory', + 'track_inventory_help' => 'Display a product stock field and update when invoices are sent', + 'stock_notifications' => 'Stock Notifications', + 'stock_notifications_help' => 'Send an email when the stock reaches the threshold', + 'vat' => 'VAT', + 'view_map' => 'View Map', + 'set_default_design' => 'Set Default Design', + 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', + 'purchase_order_issued_to' => 'Purchase Order issued to', + 'archive_task_status' => 'Archive Task Status', + 'delete_task_status' => 'Delete Task Status', + 'restore_task_status' => 'Restore Task Status', + 'lang_Hebrew' => 'Hebrew', + 'price_change_accepted' => 'Price change accepted', + 'price_change_failed' => 'Price change failed with code', + 'restore_purchases' => 'Restore Purchases', + 'activate' => 'Activate', + 'connect_apple' => 'Connect Apple', + 'disconnect_apple' => 'Disconnect Apple', + 'disconnected_apple' => 'Successfully disconnected Apple', + 'send_now' => 'Send Now', + 'received' => 'Received', + 'converted_to_expense' => 'Successfully converted to expense', + 'converted_to_expenses' => 'Successfully converted to expenses', + 'entity_removed' => 'This document has been removed, please contact the vendor for further information', + 'entity_removed_title' => 'Document no longer available', ); return $LANG; diff --git a/lang/pt_PT/texts.php b/lang/pt_PT/texts.php index 8bff5d9709f8..a5b9a9f07e44 100644 --- a/lang/pt_PT/texts.php +++ b/lang/pt_PT/texts.php @@ -21,7 +21,7 @@ $LANG = array( 'payment_terms' => 'Condições de Pagamento', 'currency_id' => 'Moeda', 'size_id' => 'Tamanho da empresa', - 'industry_id' => 'Indústria', + 'industry_id' => 'Atividade', 'private_notes' => 'Notas Privadas', 'invoice' => 'Nota Pagamento', 'client' => 'Cliente', @@ -35,18 +35,18 @@ $LANG = array( 'discount' => 'Desconto', 'taxes' => 'Impostos', 'tax' => 'Imposto', - 'item' => 'Item', + 'item' => 'Produto', 'description' => 'Descrição', - 'unit_cost' => 'Preço Unitário', + 'unit_cost' => 'Preço', 'quantity' => 'Quantidade', 'line_total' => 'Total', - 'subtotal' => 'Subtotal', - 'net_subtotal' => 'Net', + 'subtotal' => 'Total Ilíquido', + 'net_subtotal' => 'Líquido', 'paid_to_date' => 'Pago até à data', 'balance_due' => 'Valor', 'invoice_design_id' => 'Modelo', 'terms' => 'Condições', - 'your_invoice' => 'A sua Nota de Pagamento', + 'your_invoice' => 'A sua nota de pagamento', 'remove_contact' => 'Remover contacto', 'add_contact' => 'Adicionar contacto', 'create_new_client' => 'Criar novo cliente', @@ -58,18 +58,18 @@ $LANG = array( 'invoice_terms' => 'Condições da Nota de Pagamento', 'save_as_default_terms' => 'Guardar como condição padrão', 'download_pdf' => 'Transferir PDF', - 'pay_now' => 'Pagar agora', + 'pay_now' => 'Pagar Agora', 'save_invoice' => 'Guardar Nota Pagamento', - 'clone_invoice' => 'Duplicar para nota de pagamento', + 'clone_invoice' => 'Duplicar Para Nota de Pagamento', 'archive_invoice' => 'Arquivar Nota de Pagamento.', 'delete_invoice' => 'Apagar Nota de Pagamento.', 'email_invoice' => 'Enviar Nota de Pagamento.', 'enter_payment' => 'Introduzir Pag.', 'tax_rates' => 'Impostos', - 'rate' => 'Valor', + 'rate' => 'Taxa', 'settings' => 'Definições', 'enable_invoice_tax' => 'Permitir especificar o imposto da nota de pagamento', - 'enable_line_item_tax' => 'Permitir especificar os impostos por item', + 'enable_line_item_tax' => 'Permitir especificar os impostos por produto', 'dashboard' => 'Painel', 'dashboard_totals_in_all_currencies_help' => 'Nota: adicione um :link chamado ":name" para exibir os totais com base numa única moeda.', 'clients' => 'Clientes', @@ -87,15 +87,15 @@ $LANG = array( 'done' => 'Concluído', 'save' => 'Guardar', 'create' => 'Criar', - 'upload' => 'Upload', + 'upload' => 'Carregar', 'import' => 'Importar', 'download' => 'Transferir', 'cancel' => 'Cancelar', 'close' => 'Fechar', 'provide_email' => 'Por favor introduza um endereço de e-mail válido', 'powered_by' => 'Desenvolvido por', - 'no_items' => 'Sem itens', - 'recurring_invoices' => 'Nota de Pagamento Recorrentes', + 'no_items' => 'Sem produtos', + 'recurring_invoices' => 'Notas Pag. Recorrentes', 'recurring_help' => '
Enviar as mesmas notas de pagamento semanalmente, bimestralmente, mensalmente, trimestralmente ou anualmente para os clientes.
Utilize :MONTH, :QUARTER ou :YEAR para datas dinâmicas. Cálculos básicos são aplicáveis, como por exemplo :MONTH-1.
Exemplos de variáveis dinâmicas de faturas:
@@ -105,7 +105,7 @@ $LANG = array(We use :pdfmake_link to define the invoice designs declaratively. The pdfmake :playground_link provides a great way to see the library in action.
-If you need help figuring something out post a question to our :forum_link with the design you\'re using.
', + 'customize_help' => 'Usamos :pdfmake_link para defenir os estilos da nota de pagamento de forma declarativa. O pdfmake :playground_link oferece uma ótima forma de ver a biblioteca em ação.
+Se você precisa de ajuda para descobrir alguma coisa, pergunte no nosso forum :forum_link com o estilo que está usando.
', 'playground' => 'rascunho', 'support_forum' => 'fórum de suporte', - 'invoice_due_date' => 'Data de vencimento', + 'invoice_due_date' => 'Data de Vencimento', 'quote_due_date' => 'Valido até', 'valid_until' => 'Válido até', 'reset_terms' => 'Redifinir Condições', @@ -673,60 +673,60 @@ Não consegue encontrar a nota de pagamento? Precisa de ajuda? Ficamos felizes e 'invoices_sent' => ':count notas de pag. enviadas', 'status_draft' => 'Rascunho', 'status_sent' => 'Enviado', - 'status_viewed' => 'Visualizado', + 'status_viewed' => 'Visto', 'status_partial' => 'Parcial', 'status_paid' => 'Pago', 'status_unpaid' => 'Não Pago', 'status_all' => 'Todos', - 'show_line_item_tax' => 'Exibir impostos dos itens', - 'iframe_url' => 'Website', + 'show_line_item_tax' => 'Exibir imposto dos produtos', + 'iframe_url' => 'Site', 'iframe_url_help1' => 'Copie o código abaixo para o seu site.', 'iframe_url_help2' => 'Pode testar ao clicar em \'Ver como destinatário\' numa nota de pagamento.', 'auto_bill' => 'Cobrança Automática', - 'military_time' => '24h', + 'military_time' => '24 Horas', 'last_sent' => 'Último Envio', - 'reminder_emails' => 'E-mails de Lembrete', - 'quote_reminder_emails' => 'E-mails de Lembrete de Orçamento', - 'templates_and_reminders' => 'Modelos & Lembretes', + 'reminder_emails' => 'E-mails de Aviso', + 'quote_reminder_emails' => 'E-mails de Avisode Orçamento', + 'templates_and_reminders' => 'Modelos & Avisos', 'subject' => 'Assunto', 'body' => 'Conteúdo', - 'first_reminder' => 'Primeiro Lembrete', - 'second_reminder' => 'Segundo Lembrete', - 'third_reminder' => 'Terceiro Lembrete', + 'first_reminder' => 'Primeiro Aviso', + 'second_reminder' => 'Segundo Aviso', + 'third_reminder' => 'Terceiro Aviso', 'num_days_reminder' => 'Dias após o vencimento', - 'reminder_subject' => 'Lembrente: Nota de Pagamento :invoice de :account', - 'reset' => 'Redefinir', + 'reminder_subject' => 'Aviso: Nota de Pagamento :invoice de :account', + 'reset' => 'Repor', 'invoice_not_found' => 'A nota de pagamento não está disponível', 'referral_program' => 'Programa de Indicação', 'referral_code' => 'Código de Indicação', 'last_sent_on' => 'Último envio em :date', - 'page_expire' => 'Esta página a expirar, :click_here para continuar a trabalhar', + 'page_expire' => 'Esta página vai expirar, :click_here para continuar a trabalhar', 'upcoming_quotes' => 'Próximos Orçamentos', 'expired_quotes' => 'Orçamentos Expirados', 'sign_up_using' => 'Aceder', - 'invalid_credentials' => 'Utilizador e/ou palavra-passe inválidos', + 'invalid_credentials' => 'Utilizador e/ou senha inválidos', 'show_all_options' => 'Mostrar todas as opções', 'user_details' => 'Detalhes do Utilizador', 'oneclick_login' => 'Contas ligadas', 'disable' => 'Desativar', - 'invoice_quote_number' => 'Nº de Notas de Pag. e Orçamentos', + 'invoice_quote_number' => 'Número das Notas de Pag. e Orçamentos', 'invoice_charges' => 'Sobretaxas da Nota de Pagamento', 'notification_invoice_bounced' => 'Não foi possível entregar a Nota de Pagamento :invoice a :contact.', 'notification_invoice_bounced_subject' => 'A Nota de Pagamento :invoice não foi entregue', 'notification_quote_bounced' => 'Não foi possível entregar o Orçamento :invoice a :contact.', 'notification_quote_bounced_subject' => 'O Orçamento :invoice não foi entregue', - 'custom_invoice_link' => 'Link de Faturas Personalizado', - 'total_invoiced' => 'Notas de Pagamento', + 'custom_invoice_link' => 'Ligação de Faturas Personalizado', + 'total_invoiced' => 'Total Faturado', 'open_balance' => 'Em Aberto', 'verify_email' => 'Um e-mail de verificação foi enviado para a sua caixa de entrada..', 'basic_settings' => 'Definições Básicas', 'pro' => 'Pro', - 'gateways' => 'Gateways de Pagamento', + 'gateways' => 'Entradas de Pagamento', 'next_send_on' => 'Próximo Envio: :date', 'no_longer_running' => 'Esta nota de pagamento não está agendada', 'general_settings' => 'Definições Gerais', 'customize' => 'Personalizar', - 'oneclick_login_help' => 'Crie uma conta para aceder sem palavra-passe.', + 'oneclick_login_help' => 'Crie uma conta para aceder sem senha.', 'referral_code_help' => 'Recomende o nosso sistema.', 'enable_with_stripe' => 'Ativar | Requer Stripe', 'tax_settings' => 'Definições de Impostos', @@ -757,7 +757,7 @@ Não consegue encontrar a nota de pagamento? Precisa de ajuda? Ficamos felizes e 'activity_7' => ':contact viu a nota de pagamento :invoice para :client', 'activity_8' => ':user arquivou a nota de pagamento :invoice', 'activity_9' => ':user removeu a nota de pagamento :invoice', - 'activity_10' => ':contact introduziu pagamento :payment para :payment_amount na nota de pagamento :invoice para :cliente', + 'activity_10' => ':contact introduziu o pagamento :payment para :payment_amount na nota de pagamento :invoice para :cliente', 'activity_11' => ':user atualizou o pagamento :payment', 'activity_12' => ':user arquivou o pagamento :payment', 'activity_13' => ':user removeu o pagamento :payment', @@ -767,7 +767,7 @@ Não consegue encontrar a nota de pagamento? Precisa de ajuda? Ficamos felizes e 'activity_17' => ':user removeu nota de crédito :credit', 'activity_18' => ':user adicionou o orçamento :quote', 'activity_19' => ':user atualizou o orçamento :quote', - 'activity_20' => ':user enviou orçamento :quote por E-mail para :client, :contact', + 'activity_20' => ':user enviou o orçamento :quote por e-mail para :client, :contact', 'activity_21' => ':contact visualizou o orçamento :quote', 'activity_22' => ':user arquivou o orçamento :quote', 'activity_23' => ':user removeu o orçamento :quote', @@ -791,35 +791,35 @@ Não consegue encontrar a nota de pagamento? Precisa de ajuda? Ficamos felizes e 'activity_45' => ':user apagou a tarefa :task', 'activity_46' => ':user restaurou a tarefa :task', 'activity_47' => ':user atualizou a despesa :expense', - 'activity_48' => ':user created user :user', - 'activity_49' => ':user updated user :user', - 'activity_50' => ':user archived user :user', - 'activity_51' => ':user deleted user :user', - 'activity_52' => ':user restored user :user', - 'activity_53' => ':user marked sent :invoice', + 'activity_48' => ':user criou o utilizador :user', + 'activity_49' => ':user atualizou o utilizador :user', + 'activity_50' => ':user arquivou o utilizador :user', + 'activity_51' => ':user apagou o utilizador :user', + 'activity_52' => ':user restaurou o utilizador :user', + 'activity_53' => ':user marcou como enviado :invoice', 'activity_54' => ':user reabriu o ticket :ticket', - 'activity_55' => ':contact respondeu ao ticket :ticket', - 'activity_56' => ':user visualizou o ticket :ticket', + 'activity_55' => ':contact respondeu ao bilhete :ticket', + 'activity_56' => ':user visualizou o bilhete :ticket', 'payment' => 'Pagamento', 'system' => 'Sistema', 'signature' => 'Assinatura do E-mail', 'default_messages' => 'Mensagens Padrões', 'quote_terms' => 'Condições do Orçamento', - 'default_quote_terms' => 'Condições Padrões dos Orçamentos', - 'default_invoice_terms' => 'Definir condições padrões da notas de pag.', - 'default_invoice_footer' => 'Definir padrão', + 'default_quote_terms' => 'Condições Padrão dos Orçamentos', + 'default_invoice_terms' => 'Defenir condições padrão da notas de pag.', + 'default_invoice_footer' => 'Defenir padrão', 'quote_footer' => 'Rodapé do Orçamento', 'free' => 'Grátis', 'quote_is_approved' => 'Aprovada com sucesso', 'apply_credit' => 'Aplicar Nota de Crédito', 'system_settings' => 'Definições do Sistema', - 'archive_token' => 'Arquivar Token', - 'archived_token' => 'Token arquivado', + 'archive_token' => 'Arquivar Símbolo', + 'archived_token' => 'Símbolo arquivado', 'archive_user' => 'Arquivar Utilizador', 'archived_user' => 'Utilizador arquivado', 'archive_account_gateway' => 'Apagar Terminal', - 'archived_account_gateway' => 'Gateway arquivado', + 'archived_account_gateway' => 'Terminal arquivado', 'archive_recurring_invoice' => 'Arquivar Nota de Pagamento Recorrente', 'archived_recurring_invoice' => 'Nota de Pagamento Recorrente arquivada', 'delete_recurring_invoice' => 'Remover Nota de Pagamento Recorrente', @@ -836,13 +836,13 @@ Não consegue encontrar a nota de pagamento? Precisa de ajuda? Ficamos felizes e 'untitled_account' => 'Empresa Sem Nome', 'before' => 'Antes', 'after' => 'Depois', - 'reset_terms_help' => 'Redefinir para as condições padrões', + 'reset_terms_help' => 'Redefinir para as condições padrão', 'reset_footer_help' => 'Redefinir para o rodapé padrão', 'export_data' => 'Exportar Dados', 'user' => 'Utilizador', 'country' => 'País', 'include' => 'Incluir', - 'logo_too_large' => 'O seu logo tem :size, para uma melhor performance sugerimos que este tamanho não ultrapasse 200KB', + 'logo_too_large' => 'O seu logotipo tem :size, para uma melhor execução sugerimos que este tamanho não ultrapasse 200KB', 'import_freshbooks' => 'Importar de FreshBooks', 'import_data' => 'Importar Dados', 'source' => 'Fonte', @@ -853,7 +853,7 @@ Não consegue encontrar a nota de pagamento? Precisa de ajuda? Ficamos felizes e 'no_mapper' => 'Mapeamento inválido', 'invalid_csv_header' => 'CSV com cabeçalho inválido', 'client_portal' => 'Portal do Cliente', - 'admin' => 'Admin', + 'admin' => 'Administrador', 'disabled' => 'Desativado', 'show_archived_users' => 'Mostrar utilizadores arquivados', 'notes' => 'Observações', @@ -863,14 +863,14 @@ Não consegue encontrar a nota de pagamento? Precisa de ajuda? Ficamos felizes e 'publishable_key' => 'Chave Publicável', 'secret_key' => 'Chave Secreta', 'missing_publishable_key' => 'Defina a sua chave publicável do Stripe para um melhor processo de pagamento', - 'email_design' => 'Template de E-mail', + 'email_design' => 'Modelo de E-mail', 'due_by' => 'Vencido a :date', 'enable_email_markup' => 'Ativar Marcação', - 'enable_email_markup_help' => 'Tornar mais fácil para os seus clientes efetuarem os pagamentos, acrescentando marcação schema.org a seus e-mails.', - 'template_help_title' => 'Ajuda de Templates', + 'enable_email_markup_help' => 'Para tornar mais fácil para os seus clientes efetuarem os pagamentos, acrescente marcação schema.org aos seus e-mails.', + 'template_help_title' => 'Ajuda de Modelos', 'template_help_1' => 'Variáveis disponíveis:', 'email_design_id' => 'Estilo de e-mails', - 'email_design_help' => 'Make your emails look more professional with HTML layouts.', + 'email_design_help' => 'Torne os seus e-mails mais profissionais com esquemas HTML.', 'plain' => 'Plano', 'light' => 'Claro', 'dark' => 'Escuro', @@ -884,11 +884,11 @@ Não consegue encontrar a nota de pagamento? Precisa de ajuda? Ficamos felizes e 'custom_invoice_fields_helps' => 'Adicionar um campo durante a criação de uma fatura e opcionalmente mostrar etiqueta e valor no PDF.', 'custom_invoice_charges_helps' => 'Adicionar uma entrada de texto na página Criar/Editar Nota de Pagamento e incluir nos subtotais da nota de pagamento.', 'token_expired' => 'Token de acesso expirado. Tente novamente!', - 'invoice_link' => 'Link da Nota de Pagamento', - 'button_confirmation_message' => 'Confirm your email.', + 'invoice_link' => 'Endereço da Nota de Pagamento', + 'button_confirmation_message' => 'Confirme o seu e-mail.', 'confirm' => 'Confirmar', - 'email_preferences' => 'Preferências de E-mails', - 'created_invoices' => ':count nota de pagamento(s) criadas com sucesso', + 'email_preferences' => 'Preferências de e-mail', + 'created_invoices' => ':count nota(s) de pagamento criada(s) com sucesso', 'next_invoice_number' => 'O número da próxima nota de pagamento será :number.', 'next_quote_number' => 'O número do próximo orçamento será :number.', 'days_before' => 'dias antes de', @@ -896,27 +896,27 @@ Não consegue encontrar a nota de pagamento? Precisa de ajuda? Ficamos felizes e 'field_due_date' => 'data de vencimento', 'field_invoice_date' => 'data da nota de pagamento', 'schedule' => 'Agendamento', - 'email_designs' => 'Design de E-mails', + 'email_designs' => 'Modelos de e-mail', 'assigned_when_sent' => 'Assinar quando enviar', - 'white_label_purchase_link' => 'Adquira uma licença white label', + 'white_label_purchase_link' => 'Adquira uma licença de marca branca', 'expense' => 'Despesa', 'expenses' => 'Despesas', 'new_expense' => 'Introduzir Despesa', - 'enter_expense' => 'Incluir Despesa', + 'enter_expense' => 'Introduzir Despesa', 'vendors' => 'Fornecedor', 'new_vendor' => 'Novo Fornecedor', - 'payment_terms_net' => 'Net', + 'payment_terms_net' => 'Ilíquido', 'vendor' => 'Fornecedor', 'edit_vendor' => 'Editar Fornecedor', 'archive_vendor' => 'Arquivar Fornecedor', 'delete_vendor' => 'Apagar Fornecedor', 'view_vendor' => 'Visualizar Fornecedor', - 'deleted_expense' => 'Despesa excluída com sucesso', + 'deleted_expense' => 'Despesa apagada com sucesso', 'archived_expense' => 'Despesa arquivada com sucesso', - 'deleted_expenses' => 'Despesas excluídas com sucesso', + 'deleted_expenses' => 'Despesas apagadas com sucesso', 'archived_expenses' => 'Despesas arquivadas com sucesso', 'expense_amount' => 'Total de Despesas', - 'expense_balance' => 'Saldo das Despesas', + 'expense_balance' => 'Total das Despesas', 'expense_date' => 'Data da Despesa', 'expense_should_be_invoiced' => 'Esta despesa deve ser faturada?', 'public_notes' => 'Notas Públicas', @@ -932,7 +932,7 @@ Não consegue encontrar a nota de pagamento? Precisa de ajuda? Ficamos felizes e 'view_expense_num' => 'Despesa # :expense', 'updated_expense' => 'Despesa atualizada com sucesso', 'created_expense' => 'Despesa criada com sucesso', - 'enter_expense' => 'Incluir Despesa', + 'enter_expense' => 'Introduzir Despesa', 'view' => 'Visualizar', 'restore_expense' => 'Restaurar Despesa', 'invoice_expense' => 'Nota de Pagamento da Despesa', @@ -969,7 +969,7 @@ Não consegue encontrar a nota de pagamento? Precisa de ajuda? Ficamos felizes e 'friday' => 'Sexta-Feira', 'saturday' => 'Sábado', 'header_font_id' => 'Fonte do Cabeçalho', - 'body_font_id' => 'Fonte dos Textos', + 'body_font_id' => 'Fonte do Corpo', 'color_font_help' => 'Nota: A cor primária também é utilizada no portal do cliente e no e-mail personalizado.', 'live_preview' => 'Pré-visualização', 'invalid_mail_config' => 'Falha ao enviar e-mail, verifique as definições.', @@ -989,8 +989,8 @@ Não consegue encontrar a nota de pagamento? Precisa de ajuda? Ficamos felizes e 'archived_bank_account' => 'Conta bancária arquivada com sucesso', 'created_bank_account' => 'Conta bancária criada com sucesso', 'validate_bank_account' => 'Validar Conta Bancária', - 'bank_password_help' => 'Nota: a sua palavra-passe é transferida de forma segura e não será armazenada em nossos servidores.', - 'bank_password_warning' => 'Atenção: a sua palavra-passe será transferida de forma não segura, considere habilitar HTTPS.', + 'bank_password_help' => 'Nota: a sua senha é transferida de forma segura e não será armazenada em nossos servidores.', + 'bank_password_warning' => 'Atenção: a sua senha será transferida de forma não segura, considere habilitar HTTPS.', 'username' => 'Utilizador', 'account_number' => 'Conta número', 'account_name' => 'Nome da Conta', @@ -998,18 +998,18 @@ Não consegue encontrar a nota de pagamento? Precisa de ajuda? Ficamos felizes e 'status_approved' => 'Aprovado', 'quote_settings' => 'Definições dos Orçamentos', 'auto_convert_quote' => 'Auto Conversão', - 'auto_convert_quote_help' => 'Converter automaticamente um orçamento quando for aprovado pelo cliente.', + 'auto_convert_quote_help' => 'Converter automaticamente um orçamento em nota de pagamento quando for aprovado pelo cliente.', 'validate' => 'Validado', - 'info' => 'Info', + 'info' => 'Informação', 'imported_expenses' => ':count_vendors fornecedor(s) e :count_expenses despesa(s) importadas com sucesso', 'iframe_url_help3' => 'Nota: se o seu plano aceita detalhes do cartão de crédito recomendamos que tenha HTTPS no seu site.', 'expense_error_multiple_currencies' => 'As despesas não podem ter diferentes moedas.', 'expense_error_mismatch_currencies' => 'As configurações de moeda do cliente não coincidem com a moeda nesta despesa.', 'trello_roadmap' => 'Trello Roadmap', 'header_footer' => 'Cabeçalho/Rodapé', - 'first_page' => 'primeira página', - 'all_pages' => 'todas as páginas', - 'last_page' => 'última página', + 'first_page' => 'Primeira página', + 'all_pages' => 'Todas as páginas', + 'last_page' => 'Última página', 'all_pages_header' => 'Mostrar cabeçalho ativo', 'all_pages_footer' => 'Mostrar rodapé ativo', 'invoice_currency' => 'Moeda da Nota de Pagamento', @@ -1025,9 +1025,9 @@ Não consegue encontrar a nota de pagamento? Precisa de ajuda? Ficamos felizes e 'overdue' => 'Vencido', - 'white_label_text' => 'Comprar UM ANO da licença de marca branca por $:price para remover o branding do Invoice Ninja das notas de pagamento e do portal do cliente.', + 'white_label_text' => 'Comprar UM ANO da licença de marca branca por $:price para remover a marca do Invoice Ninja das notas de pagamento e do portal do cliente.', 'user_email_footer' => 'Para ajustar as suas definições de notificações de e-mail aceda :link', - 'reset_password_footer' => 'Se não solicitou a redefinição da palavra-passe por favor envie um e-mail para o nosso suporte: :email', + 'reset_password_footer' => 'Se não solicitou a redefinição da senha por favor envie um e-mail para o nosso suporte: :email', 'limit_users' => 'Desculpe, isto irá exceder o limite de :limit utilizadores', 'more_designs_self_host_header' => 'Obtenha mais 6 modelos de nota de pagamento por apenas $:price', 'old_browser' => 'Por favor use um :link', @@ -1036,7 +1036,7 @@ Não consegue encontrar a nota de pagamento? Precisa de ajuda? Ficamos felizes e 'bank_accounts_help' => 'Ligue uma conta bancária para importar automaticamente despesas e criar fornecedores. Suporta American Express e :link.', 'us_banks' => '+400 bancos dos EUA', - 'pro_plan_remove_logo' => ':link para remover a logo do Invoice Ninja contratando o plano profissional', + 'pro_plan_remove_logo' => ':link para remover a logo do Invoice Ninja adquirindo o plano profissional', 'pro_plan_remove_logo_link' => 'Clique aqui', 'invitation_status_sent' => 'Enviado', 'invitation_status_opened' => 'Aberto', @@ -1066,16 +1066,16 @@ Não consegue encontrar a nota de pagamento? Precisa de ajuda? Ficamos felizes e 'new_product' => 'Novo Produto', 'new_tax_rate' => 'Novo Imposto', 'invoiced_amount' => 'Total da Nota de Pag.', - 'invoice_item_fields' => 'Campos de itens na Nota de Pagamento', + 'invoice_item_fields' => 'Campos de produtos na Nota de Pagamento', 'custom_invoice_item_fields_help' => 'Adicionar um campo ao adicionar um item e mostrar a etiqueta e valor no PDF.', - 'recurring_invoice_number' => 'Nº Recorrente', + 'recurring_invoice_number' => 'Número Recorrente', 'recurring_invoice_number_prefix_help' => 'Especifique um prefixo para ser adicionado ao número da fatura para faturas recorrentes.', // Client Passwords - 'enable_portal_password' => 'Proteger notas de pag. com palavra-passe', - 'enable_portal_password_help' => 'Permite definir uma palavra-passe para cada contacto. Se uma palavra-passe for definida, o contacto deverá introduzir a palavra-passe antes de visualizar a nota de pagamento.', + 'enable_portal_password' => 'Proteger notas de pag. com senha', + 'enable_portal_password_help' => 'Permite definir uma senha para cada contacto. Se uma senha for defenida, o contacto deverá introduzir a senha antes de visualizar a nota de pagamento.', 'send_portal_password' => 'Gerar Automaticamente', - 'send_portal_password_help' => 'Se não definir uma palavra-passe, será gerada uma automaticamente e enviada com a primeira nota de pagamento.', + 'send_portal_password_help' => 'Se não definir uma senha, será gerada uma automaticamente e enviada com a primeira nota de pagamento.', 'expired' => 'Expirada', 'invalid_card_number' => 'Cartão de crédito inválido.', @@ -1119,20 +1119,20 @@ Não consegue encontrar a nota de pagamento? Precisa de ajuda? Ficamos felizes e // Documents 'documents_header' => 'Documentos:', 'email_documents_header' => 'Documentos:', - 'email_documents_example_1' => 'Recibo de Widgets.pdf', - 'email_documents_example_2' => 'Ficheiros Finais.zip', + 'email_documents_example_1' => 'Ferramentas recibo.pdf', + 'email_documents_example_2' => 'Finais entregas.zip', 'quote_documents' => 'Documentos de Orçamentos', 'invoice_documents' => 'Documentos de Faturas', 'expense_documents' => 'Documentos de Despesas', - 'invoice_embed_documents' => 'Documentos Embutidos', + 'invoice_embed_documents' => 'Documentos Incorporados', 'invoice_embed_documents_help' => 'Incluir imagens anexadas na nota de pagamento.', 'document_email_attachment' => 'Anexar Documentos', 'ubl_email_attachment' => 'Anexar UBL', 'download_documents' => 'Transferir Documentos (:size)', 'documents_from_expenses' => 'De despesas:', 'dropzone_default_message' => 'Arrastar ficheiros para enviar', - 'dropzone_default_message_disabled' => 'Uploads desativados', - 'dropzone_fallback_message' => 'O seu browser não suporta envio de ficheiros através de drag\'n\'drop.', + 'dropzone_default_message_disabled' => 'Carregamentos desativados', + 'dropzone_fallback_message' => 'O seu browser não suporta envio de ficheiros através de arraste e solte.', 'dropzone_fallback_text' => 'Por favor utilize o formulário abaixo para enviar ficheiros em modo de compatibilidade.', 'dropzone_file_too_big' => 'Ficheiro demasiado grande ({{filesize}}MiB). Tamanho máximo: {{maxFilesize}}MiB.', 'dropzone_invalid_file_type' => 'Não pode enviar este tipo de ficheiros.', @@ -1146,14 +1146,14 @@ Não consegue encontrar a nota de pagamento? Precisa de ajuda? Ficamos felizes e 'enable_client_portal' => 'Portal do Cliente', 'enable_client_portal_help' => 'Mostrar/ocultar o portal do cliente.', - 'enable_client_portal_dashboard' => 'Dashboard', - 'enable_client_portal_dashboard_help' => 'Mostrar/ocultar o dashboard no portal do cliente.', + 'enable_client_portal_dashboard' => 'Painel', + 'enable_client_portal_dashboard_help' => 'Mostrar/ocultar o painel no portal do cliente.', // Plans 'account_management' => 'Gerir Conta', 'plan_status' => 'Estado do Plano', - 'plan_upgrade' => 'Upgrade', + 'plan_upgrade' => 'Atualizar', 'plan_change' => 'Alterar Plano', 'pending_change_to' => 'Altera Para', 'plan_changes_to' => ':plan em :date', @@ -1166,10 +1166,10 @@ Não consegue encontrar a nota de pagamento? Precisa de ajuda? Ficamos felizes e 'trial_expired' => ':plan Plano de Avaliação Terminou', 'never' => 'Nunca', 'plan_free' => 'Gratuíto', - 'plan_pro' => 'Pro', - 'plan_enterprise' => 'Enterprise', - 'plan_white_label' => 'Self Hosted (Marca Branca)', - 'plan_free_self_hosted' => 'Self Hosted (Gratuíto)', + 'plan_pro' => 'Profissional', + 'plan_enterprise' => 'Empresarial', + 'plan_white_label' => 'Servidor Pessoal (Marca Branca)', + 'plan_free_self_hosted' => 'Servidor Pessoal (Gratuíto)', 'plan_trial' => 'Avaliação', 'plan_term' => 'Período', 'plan_term_monthly' => 'Mensal', @@ -1179,31 +1179,31 @@ Não consegue encontrar a nota de pagamento? Precisa de ajuda? Ficamos felizes e 'plan_price_monthly' => '$:price/Mês', 'plan_price_yearly' => '$:price/Ano', 'updated_plan' => 'Definições do plano atualizadas', - 'plan_paid' => 'Iniciou o período', + 'plan_paid' => 'Iniciou o Período', 'plan_started' => 'Iniciou o Plano', 'plan_expires' => 'Plano Expira', 'white_label_button' => 'Marca Branca', - 'pro_plan_year_description' => 'Subscrição de um ano no plano Invoice Ninja Pro.', - 'pro_plan_month_description' => 'Um mês de subscrição no plano Invoice Ninja Pro.', - 'enterprise_plan_product' => 'Plano Enterprise', - 'enterprise_plan_year_description' => 'Um ano de subscrição no plano Invoice Ninja Enterprise.', - 'enterprise_plan_month_description' => 'Um mês de subscrição no plano Invoice Ninja Enterprise.', + 'pro_plan_year_description' => 'Subscrição de um ano no plano Invoice Ninja Profissional.', + 'pro_plan_month_description' => 'Um mês de subscrição no plano Invoice Ninja Profissional.', + 'enterprise_plan_product' => 'Plano Empresa', + 'enterprise_plan_year_description' => 'Um ano de subscrição no plano Invoice Ninja Empresa.', + 'enterprise_plan_month_description' => 'Um mês de subscrição no plano Invoice Ninja Empresa.', 'plan_credit_product' => 'Nota de Crédito', 'plan_credit_description' => 'Crédito pelo tempo não utilizado', 'plan_pending_monthly' => 'Vamos alterar para mensal em :date', - 'plan_refunded' => 'Foi realizada um reembolso.', + 'plan_refunded' => 'Foi realizado um reembolso.', 'live_preview' => 'Pré-visualização', 'page_size' => 'Tamanho da Página', 'live_preview_disabled' => 'Pré-visualização em tempo real desactivada para suportar o tipo de letra selecionado', - 'invoice_number_padding' => 'Padding', + 'invoice_number_padding' => 'Distância', 'preview' => 'Pré-visualizar', 'list_vendors' => 'Listar Fornecedores', - 'add_users_not_supported' => 'Altere para o plano Enterprise para adicionar utilizadores adicionais à sua conta.', - 'enterprise_plan_features' => 'O plano Enterprise adiciona suporte a multiplos utilizadores e anexos de ficheiros, :link para ver a lista completa de funcionalidades.', - 'return_to_app' => 'Voltar ao App', + 'add_users_not_supported' => 'Altere para o plano Empresarial para adicionar utilizadores adicionais à sua conta.', + 'enterprise_plan_features' => 'O plano Empresarial adiciona suporte a multiplos utilizadores e anexos de ficheiros, :link para ver a lista completa de funcionalidades.', + 'return_to_app' => 'Voltar à Aplicação', // Payment updates @@ -1241,13 +1241,13 @@ Não consegue encontrar a nota de pagamento? Precisa de ajuda? Ficamos felizes e 'payment_type_stripe' => 'Stripe', 'ach' => 'ACH', 'enable_ach' => 'Aceitar transferências de bancos dos EUA', - 'stripe_ach_help' => 'Suporte para ACH também tem de estar habilitado em :link.', - 'ach_disabled' => 'Existe outro gateway configurado para débito direto.', + 'stripe_ach_help' => 'Suporte para ACH também tem de ser permitido em :link.', + 'ach_disabled' => 'Existe outro acesso configurado para débito direto.', - 'plaid' => 'Plaid', - 'client_id' => 'Client Id', - 'secret' => 'Secret', - 'public_key' => 'Public Key', + 'plaid' => 'Pago', + 'client_id' => 'Identificação do Cliente', + 'secret' => 'Segredo', + 'public_key' => 'Chave Pública', 'plaid_optional' => '(opcional)', 'plaid_environment_help' => 'Quando uma chave de teste do Stripe é dada, o ambiente de desenvolvimento do Plaid (tartan) será utilizado.', 'other_providers' => 'Outros Provedores', @@ -1299,12 +1299,12 @@ Quando tiver os valores dos depósitos, volte a esta página e conclua a verific 'account_holder_type' => 'Tipo do Proprietário da Conta', 'ach_authorization' => 'Eu autorizo a :company a utilizar a minha conta bancária para pagamentos futuros e, se necessário, creditar electronicamente a minha conta para corrigir débitos incorrectos. Compreendo que posso revogar esta autorização a qualquer altura removendo o método de pagamento ou contactando :email.', 'ach_authorization_required' => 'Deverá permitir transacções ACH.', - 'off' => 'Off', - 'opt_in' => 'Aceitar (Opt-in)', - 'opt_out' => 'Negar (Opt-out)', + 'off' => 'Desligado', + 'opt_in' => 'Aceitar', + 'opt_out' => 'Negar', 'always' => 'Sempre', - 'opted_out' => 'Negou (Opted out)', - 'opted_in' => 'Aceitou (Opted in)', + 'opted_out' => 'Negou', + 'opted_in' => 'Aceitou', 'manage_auto_bill' => 'Gerir Pagamentos Automáticos', 'enabled' => 'Ativo', 'paypal' => 'PayPal', @@ -1326,7 +1326,7 @@ Quando tiver os valores dos depósitos, volte a esta página e conclua a verific // WePay 'wepay' => 'WePay', 'sign_up_with_wepay' => 'Registar com WePay', - 'use_another_provider' => 'Utilizar outro provedor', + 'use_another_provider' => 'Utilizar outro fornecedor', 'company_name' => 'Nome da Empresa', 'wepay_company_name_help' => 'Isto irá aparecer no registo do cartão de crédito do cliente.', 'wepay_description_help' => 'O objetivo desta conta.', @@ -1334,13 +1334,13 @@ Quando tiver os valores dos depósitos, volte a esta página e conclua a verific 'wepay_tos_link_text' => 'Termos de Serviço do WePay', 'resend_confirmation_email' => 'Reenviar Email de Confirmação', 'manage_account' => 'Gerir Conta', - 'action_required' => 'Acção Necessária', + 'action_required' => 'Ação Necessária', 'finish_setup' => 'Terminar Configuração', 'created_wepay_confirmation_required' => 'Por favor verifique o seu email e confirme o seu email com o WePay', 'switch_to_wepay' => 'Alterar para WePay', 'switch' => 'Alterar', - 'restore_account_gateway' => 'Restaurar Gateway', - 'restored_account_gateway' => 'Gateway restaurado com sucesso', + 'restore_account_gateway' => 'Restaurar Acesso', + 'restored_account_gateway' => 'Acesso restaurado com sucesso', 'united_states' => 'Estados Unidos', 'canada' => 'Canadá', 'accept_debit_cards' => 'Aceitar Cartão de Débito', @@ -1353,7 +1353,7 @@ Quando tiver os valores dos depósitos, volte a esta página e conclua a verific 'security' => 'Segurança', 'see_whats_new' => 'Veja as novidades na versão v:version', 'wait_for_upload' => 'Por favor aguardo pela conclusão do envio do documento', - 'upgrade_for_permissions' => 'Atualize para o nosso plano Enterprise para ativar as permissões.', + 'upgrade_for_permissions' => 'Atualize para o nosso plano Empresarial para ativar as permissões.', 'enable_second_tax_rate' => 'Permitir indicar um segundo imposto', 'payment_file' => 'Ficheiro de Pagamento', 'expense_file' => 'Ficheiro de Despesas', @@ -1363,12 +1363,12 @@ Quando tiver os valores dos depósitos, volte a esta página e conclua a verific 'product_key' => 'Produto', 'created_products' => ':count produto(s) criados/atualizados com sucesso', 'export_help' => 'Utilize JSON se planear importar os dados para o Invoice Ninja.Rótulo|Opção1|Opção2
para exibir uma caixa de seleção.',
+ 'custom_fields_tip' => 'Utilize Legenda|Opção1|Opção2
para exibir uma caixa de seleção.',
'client_information' => 'Informação do Cliente',
'updated_client_details' => 'Detalhes do cliente atualizados com sucesso',
- 'auto' => 'Auto',
- 'tax_amount' => 'Quantia de Impostos',
- 'tax_paid' => 'Impostos pagos',
+ 'auto' => 'Automático',
+ 'tax_amount' => 'Total de Impostos',
+ 'tax_paid' => 'Impostos Pagos',
'none' => 'Nenhum',
'proposal_message_button' => 'Para ver a sua proposta para :amount, clique no botão abaixo.',
'proposal' => 'Proposta',
@@ -2731,7 +2731,7 @@ debitar da sua conta de acordo com essas instruções. Está elegível a um reem
'deleted_proposal_snippets' => ':count Recortes arquivados com sucesso',
'restored_proposal_snippet' => 'Recorte restaurado com sucesso',
'restore_proposal_snippet' => 'Restaurar Recorte',
- 'template' => 'Template',
+ 'template' => 'Modelo',
'templates' => 'Modelos',
'proposal_template' => 'Modelo',
'proposal_templates' => 'Modelos',
@@ -2770,9 +2770,9 @@ debitar da sua conta de acordo com essas instruções. Está elegível a um reem
'proposal_email' => 'E-mail de Proposta',
'proposal_subject' => 'Nova proposta :number de :account',
'proposal_message' => 'Para visualizar sua proposta para :amount, clique no link abaixo.',
- 'emailed_proposal' => 'Proposta enviada por E-mail com sucesso',
+ 'emailed_proposal' => 'Proposta enviada por e-mail com sucesso',
'load_template' => 'Carregar Modelo',
- 'no_assets' => 'Sem imagens, arraste para fazer upload',
+ 'no_assets' => 'Sem imagens, arraste para carregar',
'add_image' => 'Adicionar Imagem',
'select_image' => 'Selecionar Imagem',
'upgrade_to_upload_images' => 'Atualizar para o plano empresarial para enviar imagens',
@@ -2784,17 +2784,17 @@ debitar da sua conta de acordo com essas instruções. Está elegível a um reem
'change_requires_purge' => 'Alterar esta configuração requer :link para os dados da conta.',
'purging' => 'a limpar',
'warning_local_refund' => 'O reembolso será registado na aplicação mas NÃO será processado pelo terminal de pagamento.',
- 'email_address_changed' => 'O endereço de E-mail foi alterado',
+ 'email_address_changed' => 'O endereço de e-mail foi alterado',
'email_address_changed_message' => 'O endereço de E-mail para sua conta foi alterado de :old_email to :new_email.',
'test' => 'Teste',
'beta' => 'Beta',
'gmp_required' => 'A exportação para ZIP requer a extensão GMP',
- 'email_history' => 'Histórico de E-mails',
+ 'email_history' => 'Histórico de e-mails',
'loading' => 'A Carregar',
'no_messages_found' => 'Não foram encontradas mensagens',
'processing' => 'A Processar',
'reactivate' => 'Reativar',
- 'reactivated_email' => 'O endereço de email foi reativado',
+ 'reactivated_email' => 'O endereço de e-mail foi reativado',
'emails' => 'E-mails',
'opened' => 'Aberto',
'bounced' => 'Devolvido',
@@ -2803,7 +2803,7 @@ debitar da sua conta de acordo com essas instruções. Está elegível a um reem
'total_bounced' => 'Total Devolvido',
'total_spam' => 'Total Spam',
'platforms' => 'Plataformas',
- 'email_clients' => 'Clientes de E-mail',
+ 'email_clients' => 'E-mail dos Clientes',
'mobile' => 'Móvel',
'desktop' => 'Desktop',
'webmail' => 'Webmail',
@@ -2854,19 +2854,19 @@ debitar da sua conta de acordo com essas instruções. Está elegível a um reem
'vendor_field' => 'Campo do Fornecedor',
'company_field' => 'Campo da Empresa',
'invoice_field' => 'Campo da Nota de Pagamento',
- 'invoice_surcharge' => 'Sobretaxa de Fatura',
+ 'invoice_surcharge' => 'Taxa Extra da Fatura',
'custom_task_fields_help' => 'Adicionar um campo na criação de uma tarefa.',
'custom_project_fields_help' => 'Adicionar um campo na criação de um projeto.',
'custom_expense_fields_help' => 'Adicionar um campo na criação de uma despesa.',
'custom_vendor_fields_help' => 'Adicionar um campo na criação de um fornecedor.',
'messages' => 'Mensagens',
- 'unpaid_invoice' => 'Nota de Pagamento não Paga',
+ 'unpaid_invoice' => 'Nota de Pagamento Não Paga',
'paid_invoice' => 'Nota de Pagamento Paga',
'unapproved_quote' => 'Orçamento não Aprovado',
'unapproved_proposal' => 'Proposta não Aprovada',
- 'autofills_city_state' => 'Auto-preencher cidade/distrito',
+ 'autofills_city_state' => 'Preencher automaticamente cidade/distrito',
'no_match_found' => 'Nenhum resultado encontrado',
- 'password_strength' => 'Segurança da Palavra-passe',
+ 'password_strength' => 'Segurança da Senha',
'strength_weak' => 'Fraca',
'strength_good' => 'Boa',
'strength_strong' => 'Forte',
@@ -2891,8 +2891,8 @@ debitar da sua conta de acordo com essas instruções. Está elegível a um reem
'maximum' => 'Máximo',
'sort' => 'Ordenar',
'refresh_complete' => 'Recarregar Completo',
- 'please_enter_your_email' => 'Por favor introduza o seu E-mail',
- 'please_enter_your_password' => 'Por favor introduza a sua palavra-passe',
+ 'please_enter_your_email' => 'Por favor introduza o seu e-mail',
+ 'please_enter_your_password' => 'Por favor introduza a sua senha',
'please_enter_your_url' => 'Por favor introduza o seu URL',
'please_enter_a_product_key' => 'Por favor introduza uma chave de produto',
'an_error_occurred' => 'Ocorreu um erro',
@@ -2902,14 +2902,14 @@ debitar da sua conta de acordo com essas instruções. Está elegível a um reem
'could_not_launch' => 'Não foi possível iniciar',
'additional' => 'Adicional',
'ok' => 'Ok',
- 'email_is_invalid' => 'Email é inválido',
- 'items' => 'Itens',
+ 'email_is_invalid' => 'E-mail é inválido',
+ 'items' => 'Produtos',
'partial_deposit' => 'Depósito/Parcial',
- 'add_item' => 'Adicionar Item',
+ 'add_item' => 'Adicionar Produto',
'total_amount' => 'Quantia Total',
'pdf' => 'PDF',
'invoice_status_id' => 'Estado da Nota de Pagamento',
- 'click_plus_to_add_item' => 'Clique + para adicionar um item',
+ 'click_plus_to_add_item' => 'Clique + para adicionar um produto',
'count_selected' => ':count selecionados',
'dismiss' => 'Dispensar',
'please_select_a_date' => 'Por favor selecione uma data',
@@ -2927,7 +2927,7 @@ debitar da sua conta de acordo com essas instruções. Está elegível a um reem
'invoice_status_4' => 'Aprovado',
'invoice_status_5' => 'Parcial',
'invoice_status_6' => 'Pago',
- 'marked_invoice_as_sent' => 'Sucesso! A nota de pagamento foi marcada como enviada.',
+ 'marked_invoice_as_sent' => 'A nota de pagamento foi marcada como enviada.',
'please_enter_a_client_or_contact_name' => 'Por favor introduza um cliente ou nome de contacto',
'restart_app_to_apply_change' => 'Reinicie a aplicação para aplicar a mudança',
'refresh_data' => 'Atualizar Dados',
@@ -2935,14 +2935,14 @@ debitar da sua conta de acordo com essas instruções. Está elegível a um reem
'no_records_found' => 'Nenhum registo encontrado',
'industry' => 'Indústria',
'size' => 'Tamanho',
- 'net' => 'Net',
- 'show_tasks' => 'Exibir tarefas',
- 'email_reminders' => 'Lembretes de E-mail',
- 'reminder1' => 'Primeiro Lembrete',
- 'reminder2' => 'Segundo Lembrete',
- 'reminder3' => 'Terceiro Lembrete',
+ 'net' => 'Líquido',
+ 'show_tasks' => 'Mostrar tarefas',
+ 'email_reminders' => 'Avisos de e-mail',
+ 'reminder1' => 'Primeiro Aviso',
+ 'reminder2' => 'Segundo Aviso',
+ 'reminder3' => 'Terceiro Aviso',
'send' => 'Enviar',
- 'auto_billing' => 'Cobrança automática',
+ 'auto_billing' => 'Faturamento automática',
'button' => 'Botão',
'more' => 'Mais',
'edit_recurring_invoice' => 'Editar Fatura Recorrente',
@@ -2961,19 +2961,19 @@ debitar da sua conta de acordo com essas instruções. Está elegível a um reem
'refunded' => 'Reembolsado',
'marked_quote_as_sent' => 'Orçamento marcado como enviado com sucesso',
'custom_module_settings' => 'Configurações Personalizadas de Módulo',
- 'ticket' => 'Ticket',
- 'tickets' => 'Tickets',
- 'ticket_number' => 'Ticket #',
- 'new_ticket' => 'Novo Ticket',
- 'edit_ticket' => 'Editar Ticket',
- 'view_ticket' => 'Visualizar Ticket',
- 'archive_ticket' => 'Arquivar Ticket',
- 'restore_ticket' => 'Restaurar Ticket',
- 'delete_ticket' => 'Apagar Ticket',
- 'archived_ticket' => 'Ticket arquivado com sucesso',
- 'archived_tickets' => 'Tickets arquivados com sucesso',
- 'restored_ticket' => 'Ticket restaurado com sucesso',
- 'deleted_ticket' => 'Ticket apagado com sucesso',
+ 'ticket' => 'Bilhete',
+ 'tickets' => 'Bilhetes',
+ 'ticket_number' => 'Bilhete #',
+ 'new_ticket' => 'Novo Bilhete',
+ 'edit_ticket' => 'Editar Bilhete',
+ 'view_ticket' => 'Visualizar Bilhete',
+ 'archive_ticket' => 'Arquivar Bilhete',
+ 'restore_ticket' => 'Restaurar Bilhete',
+ 'delete_ticket' => 'Apagar Bilhete',
+ 'archived_ticket' => 'Bilhete arquivado com sucesso',
+ 'archived_tickets' => 'Bilhetes arquivados com sucesso',
+ 'restored_ticket' => 'Bilhete restaurado com sucesso',
+ 'deleted_ticket' => 'Bilhete apagado com sucesso',
'open' => 'Aberto',
'new' => 'Novo',
'closed' => 'Fechado',
@@ -2990,51 +2990,51 @@ debitar da sua conta de acordo com essas instruções. Está elegível a um reem
'assigned_to' => 'Atribuído para',
'reply' => 'Responder',
'awaiting_reply' => 'Aguarda Resposta',
- 'ticket_close' => 'Fechar Ticket',
- 'ticket_reopen' => 'Reabrir Ticket',
- 'ticket_open' => 'Abrir Ticket',
- 'ticket_split' => 'Dividir Ticket',
- 'ticket_merge' => 'Unir Ticket',
- 'ticket_update' => 'Atualizar Ticket',
- 'ticket_settings' => 'Configurações do Ticket',
- 'updated_ticket' => 'Ticket Atualizado',
+ 'ticket_close' => 'Fechar Bilhete',
+ 'ticket_reopen' => 'Reabrir Bilhete',
+ 'ticket_open' => 'Abrir Bilhete',
+ 'ticket_split' => 'Dividir Bilhete',
+ 'ticket_merge' => 'Unir Bilhete',
+ 'ticket_update' => 'Atualizar Bilhete',
+ 'ticket_settings' => 'Configurações do Bilhete',
+ 'updated_ticket' => 'Bilhete Atualizado',
'mark_spam' => 'Marcar como Spam',
'local_part' => 'Parte Local',
'local_part_unavailable' => 'Nome indisponível',
'local_part_available' => 'Nome disponível',
'local_part_invalid' => 'Nome inválido (apenas alfanuméricos, sem espaços)',
- 'local_part_help' => 'Personalizar a parte local de sua caixa de email de entrada. Ex: SEU_NOME@support.invoiceninja.com',
+ 'local_part_help' => 'Personalizar a parte local do seu e-mail da caixa de entrada. Ex: SEU_NOME@support.invoiceninja.com',
'from_name_help' => 'Nome do remetente é o texto disponibilizado para ser mostrado ao invés do endereço de email. Ex: Centro de Suporte',
'local_part_placeholder' => 'SEU_NOME',
- 'from_name_placeholder' => 'Centro de Suporte',
+ 'from_name_placeholder' => 'Centro de Ajuda',
'attachments' => 'Anexos',
- 'client_upload' => 'Uploads do Cliente',
+ 'client_upload' => 'Carregamentos do Cliente',
'enable_client_upload_help' => 'Permitir que clientes enviem documentos/anexos',
- 'max_file_size_help' => 'O tamanho máximo de arquivo (KB) é limitado pelas suas variáveis post_max_size e upload_max_filesize definidos no ficheiro PHP.INI',
+ 'max_file_size_help' => 'O tamanho máximo do ficheiro (KB) é limitado pelas suas variáveis post_max_size e upload_max_filesize definidos no ficheiro PHP.INI',
'max_file_size' => 'Tamanho máximo do ficheiro',
'mime_types' => 'Tipos MIME',
'mime_types_placeholder' => '.pdf , .docx , .jpg',
'mime_types_help' => 'Lista separada por vírgulas de tipos MIME permitidos, deixe em branco para TODOS',
- 'ticket_number_start_help' => 'O número do Ticket precisa ser maior que o número de ticket atual',
- 'new_ticket_template_id' => 'Novo Ticket',
- 'new_ticket_autoresponder_help' => 'Selecionar um modelo enviará uma resposta automática para um cliente/contato quando um novo Ticket for criado',
- 'update_ticket_template_id' => 'Ticket atualizado',
- 'update_ticket_autoresponder_help' => 'Selecionar um modelo enviará uma resposta automática para um cliente/contato quando um novo Ticket for atualizado',
- 'close_ticket_template_id' => 'Ticket fechado',
- 'close_ticket_autoresponder_help' => 'Selecionar um modelo enviará uma resposta automática para um cliente/contato quando um novo Ticket for fechado',
+ 'ticket_number_start_help' => 'O número do Bilhete precisa ser maior que o número de Bilhete atual',
+ 'new_ticket_template_id' => 'Novo Bilhete',
+ 'new_ticket_autoresponder_help' => 'Selecionar um modelo enviará uma resposta automática para um cliente/contato quando um novo bilhete for criado',
+ 'update_ticket_template_id' => 'Bilhete atualizado',
+ 'update_ticket_autoresponder_help' => 'Selecionar um modelo enviará uma resposta automática para um cliente/contato quando um novo Bilhete for atualizado',
+ 'close_ticket_template_id' => 'Bilhete fechado',
+ 'close_ticket_autoresponder_help' => 'Selecionar um modelo enviará uma resposta automática para um cliente/contato quando um novo Bilhete for fechado',
'default_priority' => 'Prioridade Padrão',
'alert_new_comment_id' => 'Novo comentário',
'alert_comment_ticket_help' => 'Selecionar um modelo enviará uma notificação (para um agente) quando um novo comentário for feito.',
- 'alert_comment_ticket_email_help' => 'Emails separados por vírgulas para bcc após um novo comentário.',
- 'new_ticket_notification_list' => 'Notificações adicionais de novo ticket',
+ 'alert_comment_ticket_email_help' => 'E-mails separados por vírgulas para bcc após um novo comentário.',
+ 'new_ticket_notification_list' => 'Notificações adicionais de novo bilhete',
'update_ticket_notification_list' => 'Notificações adicionais de novo comentário',
'comma_separated_values' => 'admin@example.com, supervisor@example.com',
- 'alert_ticket_assign_agent_id' => 'Atribuição de Ticket',
- 'alert_ticket_assign_agent_id_hel' => 'Selecionar um modelo enviará uma notificação (para um agente) quando um ticket for atribuído.',
- 'alert_ticket_assign_agent_id_notifications' => 'Notificações adicionais de ticket atribuído',
- 'alert_ticket_assign_agent_id_help' => 'Emails separados por vírgulas para bcc após atribuição de ticket.',
- 'alert_ticket_transfer_email_help' => 'Emails separados por vírgulas para bcc após transferência de ticket.',
- 'alert_ticket_overdue_agent_id' => 'Atraso de Ticket',
+ 'alert_ticket_assign_agent_id' => 'Atribuição de Bilhete',
+ 'alert_ticket_assign_agent_id_hel' => 'Selecionar um modelo enviará uma notificação (para um agente) quando um bilhete for atribuído.',
+ 'alert_ticket_assign_agent_id_notifications' => 'Notificações adicionais de bilhete atribuído',
+ 'alert_ticket_assign_agent_id_help' => 'E-mails separados por vírgulas para bcc após atribuição de bilhete.',
+ 'alert_ticket_transfer_email_help' => 'Emails separados por vírgulas para bcc após transferência de bilhete.',
+ 'alert_ticket_overdue_agent_id' => 'Atraso de Bilhete',
'alert_ticket_overdue_email' => 'Notificações adicionais de ticket atrasado',
'alert_ticket_overdue_email_help' => 'Emails separados por vírgulas para bcc após atraso de ticket. ',
'alert_ticket_overdue_agent_id_help' => 'Selecionar um modelo enviará uma notificação (para um agente) quando um ticket atrasar. ',
@@ -3088,8 +3088,8 @@ debitar da sua conta de acordo com essas instruções. Está elegível a um reem
'custom_client1' => ':VALUE',
'custom_client2' => ':VALUE',
'compare' => 'Comparar',
- 'hosted_login' => 'Login Hospedado',
- 'selfhost_login' => 'Login Auto-Hospedado',
+ 'hosted_login' => 'Login Alojado',
+ 'selfhost_login' => 'Login Servidor Pessoal',
'google_login' => 'Login via Google',
'thanks_for_patience' => 'Obrigado por sua paciência enquanto trabalhamos para implementar estas funcionalidades.\n\nEsperamos tê-las concluídas nos próximos meses.\n\nAté lá, continuaremos a dar suporte ao',
'legacy_mobile_app' => 'Aplicação Móvel legacy',
@@ -3127,7 +3127,7 @@ debitar da sua conta de acordo com essas instruções. Está elegível a um reem
'please_enter_a_name' => 'Por favor introduza um nome',
'click_plus_to_add_time' => 'Clique + para adicionar tempo',
'design' => 'Modelo',
- 'password_is_too_short' => 'A palavra-passe é muito curta',
+ 'password_is_too_short' => 'A senha é muito curta',
'failed_to_find_record' => 'Falha ao procurar registo',
'valid_until_days' => 'Válido até',
'valid_until_days_help' => 'Define automaticamente o valor Válido até nas cotações para muitos dias no futuro. Deixe em branco para desativar.',
@@ -4436,7 +4436,7 @@ O envio de E-mails foi suspenso. Será retomado às 23:00 UTC.',
'end_all_sessions' => 'End All Sessions',
'count_session' => '1 Session',
'count_sessions' => ':count Sessions',
- 'invoice_created' => 'Invoice Created',
+ 'invoice_created' => 'Nota De Pagamento Criada',
'quote_created' => 'Quote Created',
'credit_created' => 'Credit Created',
'enterprise' => 'Enterprise',
@@ -4586,7 +4586,7 @@ O envio de E-mails foi suspenso. Será retomado às 23:00 UTC.',
'center' => 'Center',
'page_numbering' => 'Page Numbering',
'page_numbering_alignment' => 'Page Numbering Alignment',
- 'invoice_sent_notification_label' => 'Invoice Sent',
+ 'invoice_sent_notification_label' => 'Nota de Pagamento Enviada',
'show_product_description' => 'Show Product Description',
'show_product_description_help' => 'Include the description in the product dropdown',
'invoice_items' => 'Invoice Items',
@@ -4599,7 +4599,7 @@ O envio de E-mails foi suspenso. Será retomado às 23:00 UTC.',
'stop_on_unpaid_help' => 'Stop creating recurring invoices if the last invoice is unpaid.',
'use_quote_terms' => 'Use Quote Terms',
'use_quote_terms_help' => 'When converting a quote to an invoice',
- 'add_country' => 'Add Country',
+ 'add_country' => 'Adicionar País',
'enable_tooltips' => 'Enable Tooltips',
'enable_tooltips_help' => 'Show tooltips when hovering the mouse',
'multiple_client_error' => 'Error: records belong to more than one client',
@@ -4631,6 +4631,102 @@ O envio de E-mails foi suspenso. Será retomado às 23:00 UTC.',
'notification_purchase_order_accepted_subject' => 'Purchase Order :purchase_order was accepted by :vendor',
'notification_purchase_order_accepted' => 'The following vendor :vendor accepted Purchase Order :purchase_order for :amount.',
'amount_received' => 'Amount received',
+ 'purchase_order_already_expensed' => 'Already converted to an expense.',
+ 'convert_to_expense' => 'Convert to Expense',
+ 'add_to_inventory' => 'Add to Inventory',
+ 'added_purchase_order_to_inventory' => 'Successfully added purchase order to inventory',
+ 'added_purchase_orders_to_inventory' => 'Successfully added purchase orders to inventory',
+ 'client_document_upload' => 'Client Document Upload',
+ 'vendor_document_upload' => 'Vendor Document Upload',
+ 'vendor_document_upload_help' => 'Enable vendors to upload documents',
+ 'are_you_enjoying_the_app' => 'Are you enjoying the app?',
+ 'yes_its_great' => 'Yes, it"s great!',
+ 'not_so_much' => 'Not so much',
+ 'would_you_rate_it' => 'Great to hear! Would you like to rate it?',
+ 'would_you_tell_us_more' => 'Sorry to hear it! Would you like to tell us more?',
+ 'sure_happy_to' => 'Sure, happy to',
+ 'no_not_now' => 'No, not now',
+ 'add' => 'Add',
+ 'last_sent_template' => 'Last Sent Template',
+ 'enable_flexible_search' => 'Enable Flexible Search',
+ 'enable_flexible_search_help' => 'Match non-contiguous characters, ie. "ct" matches "cat"',
+ 'vendor_details' => 'Vendor Details',
+ 'purchase_order_details' => 'Purchase Order Details',
+ 'qr_iban' => 'QR IBAN',
+ 'besr_id' => 'BESR ID',
+ 'clone_to_purchase_order' => 'Clone to PO',
+ 'vendor_email_not_set' => 'Vendor does not have an email address set',
+ 'bulk_send_email' => 'Send Email',
+ 'marked_purchase_order_as_sent' => 'Successfully marked purchase order as sent',
+ 'marked_purchase_orders_as_sent' => 'Successfully marked purchase orders as sent',
+ 'accepted_purchase_order' => 'Successfully accepted purchase order',
+ 'accepted_purchase_orders' => 'Successfully accepted purchase orders',
+ 'cancelled_purchase_order' => 'Successfully cancelled purchase order',
+ 'cancelled_purchase_orders' => 'Successfully cancelled purchase orders',
+ 'please_select_a_vendor' => 'Please select a vendor',
+ 'purchase_order_total' => 'Purchase Order Total',
+ 'email_purchase_order' => 'Email Purchase Order',
+ 'bulk_email_purchase_order' => 'Email Purchase Order',
+ 'disconnected_email' => 'Successfully disconnected email',
+ 'connect_email' => 'Connect Email',
+ 'disconnect_email' => 'Disconnect Email',
+ 'use_web_app_to_connect_microsoft' => 'Please use the web app to connect to Microsoft',
+ 'email_provider' => 'Email Provider',
+ 'connect_microsoft' => 'Connect Microsoft',
+ 'disconnect_microsoft' => 'Disconnect Microsoft',
+ 'connected_microsoft' => 'Successfully connected Microsoft',
+ 'disconnected_microsoft' => 'Successfully disconnected Microsoft',
+ 'microsoft_sign_in' => 'Login with Microsoft',
+ 'microsoft_sign_up' => 'Sign up with Microsoft',
+ 'emailed_purchase_order' => 'Successfully queued purchase order to be sent',
+ 'emailed_purchase_orders' => 'Successfully queued purchase orders to be sent',
+ 'enable_react_app' => 'Change to the React web app',
+ 'purchase_order_design' => 'Purchase Order Design',
+ 'purchase_order_terms' => 'Purchase Order Terms',
+ 'purchase_order_footer' => 'Purchase Order Footer',
+ 'require_purchase_order_signature' => 'Purchase Order Signature',
+ 'require_purchase_order_signature_help' => 'Require vendor to provide their signature.',
+ 'new_purchase_order' => 'New Purchase Order',
+ 'edit_purchase_order' => 'Edit Purchase Order',
+ 'created_purchase_order' => 'Successfully created purchase order',
+ 'updated_purchase_order' => 'Successfully updated purchase order',
+ 'archived_purchase_order' => 'Successfully archived purchase order',
+ 'deleted_purchase_order' => 'Successfully deleted purchase order',
+ 'removed_purchase_order' => 'Successfully removed purchase order',
+ 'restored_purchase_order' => 'Successfully restored purchase order',
+ 'search_purchase_order' => 'Search Purchase Order',
+ 'search_purchase_orders' => 'Search Purchase Orders',
+ 'login_url' => 'Login URL',
+ 'enable_applying_payments' => 'Ativar a Aplicação de Pagamentos',
+ 'enable_applying_payments_help' => 'Ajuda à criação e aplicação de pagamentos separadamente',
+ 'stock_quantity' => 'Stock Quantity',
+ 'notification_threshold' => 'Notification Threshold',
+ 'track_inventory' => 'Track Inventory',
+ 'track_inventory_help' => 'Display a product stock field and update when invoices are sent',
+ 'stock_notifications' => 'Stock Notifications',
+ 'stock_notifications_help' => 'Send an email when the stock reaches the threshold',
+ 'vat' => 'VAT',
+ 'view_map' => 'View Map',
+ 'set_default_design' => 'Set Default Design',
+ 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments',
+ 'purchase_order_issued_to' => 'Purchase Order issued to',
+ 'archive_task_status' => 'Archive Task Status',
+ 'delete_task_status' => 'Delete Task Status',
+ 'restore_task_status' => 'Restore Task Status',
+ 'lang_Hebrew' => 'Hebrew',
+ 'price_change_accepted' => 'Price change accepted',
+ 'price_change_failed' => 'Price change failed with code',
+ 'restore_purchases' => 'Restore Purchases',
+ 'activate' => 'Activate',
+ 'connect_apple' => 'Connect Apple',
+ 'disconnect_apple' => 'Disconnect Apple',
+ 'disconnected_apple' => 'Successfully disconnected Apple',
+ 'send_now' => 'Send Now',
+ 'received' => 'Received',
+ 'converted_to_expense' => 'Successfully converted to expense',
+ 'converted_to_expenses' => 'Successfully converted to expenses',
+ 'entity_removed' => 'This document has been removed, please contact the vendor for further information',
+ 'entity_removed_title' => 'Document no longer available',
);
return $LANG;
diff --git a/psalm.xml b/psalm.xml
index 52f15a658480..629a6cb49156 100644
--- a/psalm.xml
+++ b/psalm.xml
@@ -57,6 +57,16 @@