diff --git a/.gitignore b/.gitignore index 8091b7cec6bf..dc691e6fbef4 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,6 @@ /app/config/ubuntu /app/config/packages/anahkiasen/rocketeer/ /app/storage -/public/logo /public/build /public/vendor /bootstrap/compiled.php diff --git a/README.md b/README.md index 1be56f78a9f5..a62690ee93a0 100644 --- a/README.md +++ b/README.md @@ -6,12 +6,13 @@ Most online invoicing sites are expensive. They shouldn't be. The aim of this project is to provide a free, open-source alternative. Additionally, the hope is the codebase will serve as a sample site for Laravel as well as other JavaScript technologies. -The high level instructions for setting up the site are below but there's also a [setup guide](http://hillelcoren.com/invoice-ninja/laravel-ubuntu-virtualbox/). For discussion of the code please use the [Google Group](https://groups.google.com/d/forum/invoiceninja). +The high level instructions for setting up the site are below but there's also a [setup guide](http://hillelcoren.com/invoice-ninja/laravel-ubuntu-virtualbox/). If you'd like to translate the site please use [caouecs/Laravel4-long](https://github.com/caouecs/Laravel4-lang) for the starter files. -For updates follow [@invoiceninja](https://twitter.com/invoiceninja) or join the [Facebook Group](https://www.facebook.com/invoiceninja). +For updates follow [@invoiceninja](https://twitter.com/invoiceninja) or join the [Facebook Group](https://www.facebook.com/invoiceninja). For discussion of the code please use the [Google Group](https://groups.google.com/d/forum/invoiceninja). Site design by [kantorp-wegl.in](http://kantorp-wegl.in/) + ### Features * Core application built using Laravel 4.1 * Invoice PDF generation directly in the browser diff --git a/app/controllers/AccountController.php b/app/controllers/AccountController.php index 48b9eace5ddc..fb5a3731f806 100755 --- a/app/controllers/AccountController.php +++ b/app/controllers/AccountController.php @@ -61,6 +61,84 @@ class AccountController extends \BaseController { return Redirect::to('invoices/create'); } + public function enableProPlan() + { + if (Auth::user()->isPro()) + { + return Redirect::to('/dashboard'); + } + + $account = Auth::user()->account; + + $ninjaAccount = $this->getNinjaAccount(); + $ninjaClient = $this->getNinjaClient($ninjaAccount); + + + + } + + private function getNinjaAccount() + { + $account = Account::whereAccountKey(NINJA_ACCOUNT_KEY)->first(); + + if ($account) + { + return $account; + } + else + { + $account = new Account(); + $account->name = 'Invoice Ninja'; + $account->work_email = 'contact@invoiceninja.com'; + $account->work_phone = '(800) 763-1948'; + $account->account_key = NINJA_ACCOUNT_KEY; + $account->save(); + + $random = str_random(RANDOM_KEY_LENGTH); + + $user = new User(); + $user->email = 'contact@invoiceninja.com'; + $user->password = $random; + $user->password_confirmation = $random; + $user->username = $random; + $user->notify_sent = false; + $user->notify_paid = false; + $account->users()->save($user); + } + + return $account; + } + + private function getNinjaClient($ninjaAccount) + { + $client = Client::whereAccountId($ninjaAccount->id)->wherePublicId(Auth::user()->account_id)->first(); + + if ($client) + { + return $client; + } + else + { + $client = new Client; + $client->public_id = Auth::user()->account_id; + $client->user_id = $ninjaAccount->users()->first()->id; + foreach (['name', 'address1', 'address2', 'city', 'state', 'postal_code', 'country_id', 'work_phone'] as $field) + { + $client->$field = Auth::user()->account->$field; + } + $ninjaAccount->clients()->save($client); + + $contact = new Contact; + $contact->user_id = $ninjaAccount->users()->first()->id; + $contact->is_primary = true; + foreach (['first_name', 'last_name', 'email', 'phone'] as $field) + { + $contact->$field = Auth::user()->$field; + } + $client->contacts()->save($contact); + } + } + public function setTrashVisible($entityType, $visible) { Session::put('show_trash', $visible == 'true'); @@ -191,30 +269,26 @@ class AccountController extends \BaseController { private function export() { - $output = fopen("php://output",'w') or die("Can't open php://output"); - header("Content-Type:application/csv"); - header("Content-Disposition:attachment;filename=export.csv"); + $output = fopen('php://output','w') or Utils::fatalError(); + header('Content-Type:application/csv'); + header('Content-Disposition:attachment;filename=export.csv'); - $clients = Client::where('account_id','=',Auth::user()->account_id)->get(); + $clients = Client::scope()->get(); AccountController::exportData($output, $clients->toArray()); - $contacts = DB::table('contacts')->whereIn('client_id', function($query){ - $query->select('client_id')->from('clients')->where('account_id','=',Auth::user()->account_id); - })->get(); - AccountController::exportData($output, Utils::toArray($contacts)); - - $invoices = Invoice::where('account_id','=',Auth::user()->account_id)->get(); - AccountController::exportData($output, $invoices->toArray()); + $contacts = Contact::scope()->get(); + AccountController::exportData($output, $contacts->toArray()); - $invoiceItems = DB::table('invoice_items')->whereIn('invoice_id', function($query){ - $query->select('invoice_id')->from('invoices')->where('account_id','=',Auth::user()->account_id); - })->get(); - AccountController::exportData($output, Utils::toArray($invoiceItems)); + $invoices = Invoice::scope()->get(); + AccountController::exportData($output, $invoices->toArray()); - $payments = Payment::where('account_id','=',Auth::user()->account_id)->get(); + $invoiceItems = InvoiceItem::scope()->get(); + AccountController::exportData($output, $invoiceItems->toArray()); + + $payments = Payment::scope()->get(); AccountController::exportData($output, $payments->toArray()); - $credits = Credit::where('account_id','=',Auth::user()->account_id)->get(); + $credits = Credit::scope()->get(); AccountController::exportData($output, $credits->toArray()); fclose($output); @@ -331,14 +405,21 @@ class AccountController extends \BaseController { Activity::createClient($client); } - $message = Utils::pluralize('Successfully created ? client', $count); + $message = Utils::pluralize('created_client', $count); Session::flash('message', $message); return Redirect::to('clients'); } private function mapFile() - { + { $file = Input::file('file'); + + if ($file == null) + { + Session::flash('error', trans('texts.select_file')); + return Redirect::to('company/import_export'); + } + $name = $file->getRealPath(); require_once(app_path().'/includes/parsecsv.lib.php'); @@ -348,7 +429,8 @@ class AccountController extends \BaseController { if (count($csv->data) + Client::scope()->count() > MAX_NUM_CLIENTS) { - Session::flash('error', "Sorry, this wll exceed the limit of " . MAX_NUM_CLIENTS . " clients"); + $message = Utils::pluralize('limit_clients', MAX_NUM_CLIENTS); + Session::flash('error', $message); return Redirect::to('company/import_export'); } @@ -452,7 +534,7 @@ class AccountController extends \BaseController { $user->notify_paid = Input::get('notify_paid'); $user->save(); - Session::flash('message', 'Successfully updated settings'); + Session::flash('message', trans('texts.updated_settings')); return Redirect::to('company/notifications'); } @@ -515,7 +597,7 @@ class AccountController extends \BaseController { $account->account_gateways()->save($accountGateway); } - Session::flash('message', 'Successfully updated settings'); + Session::flash('message', trans('texts.updated_settings')); return Redirect::to('company/payments'); } } @@ -574,7 +656,7 @@ class AccountController extends \BaseController { Event::fire('user.refresh'); - Session::flash('message', 'Successfully updated details'); + Session::flash('message', trans('texts.updated_settings')); return Redirect::to('company/details'); } } @@ -583,7 +665,7 @@ class AccountController extends \BaseController { File::delete('logo/' . Auth::user()->account->account_key . '.jpg'); - Session::flash('message', 'Successfully removed logo'); + Session::flash('message', trans('texts.removed_logo')); return Redirect::to('company/details'); } diff --git a/app/controllers/ClientController.php b/app/controllers/ClientController.php index 0cfa7f649cc0..a8238e1f2462 100755 --- a/app/controllers/ClientController.php +++ b/app/controllers/ClientController.php @@ -229,17 +229,16 @@ class ClientController extends \BaseController { if ($publicId) { - Session::flash('message', 'Successfully updated client'); + Session::flash('message', trans('texts.updated_client')); } else { Activity::createClient($client); - Session::flash('message', 'Successfully created client'); + Session::flash('message', trans('texts.created_client')); } return Redirect::to('clients/' . $client->public_id); } - } public function bulk() @@ -248,7 +247,7 @@ class ClientController extends \BaseController { $ids = Input::get('id') ? Input::get('id') : Input::get('ids'); $count = $this->clientRepo->bulk($ids, $action); - $message = Utils::pluralize('Successfully '.$action.'d ? client', $count); + $message = Utils::pluralize($action.'d_client', $count); Session::flash('message', $message); return Redirect::to('clients'); diff --git a/app/controllers/CreditController.php b/app/controllers/CreditController.php index 1b9ca45c1fa5..b2a44086853c 100755 --- a/app/controllers/CreditController.php +++ b/app/controllers/CreditController.php @@ -121,7 +121,7 @@ class CreditController extends \BaseController { { $this->creditRepo->save($publicId, Input::all()); - $message = $publicId ? 'Successfully updated credit' : 'Successfully created credit'; + $message = trans('texts.created_credit'); Session::flash('message', $message); return Redirect::to('clients/' . Input::get('client')); } @@ -135,7 +135,7 @@ class CreditController extends \BaseController { if ($count > 0) { - $message = Utils::pluralize('Successfully '.$action.'d ? credit', $count); + $message = Utils::pluralize($action.'d_credit', $count); Session::flash('message', $message); } diff --git a/app/controllers/HomeController.php b/app/controllers/HomeController.php index 1a344c9245a2..4a5c047a01e0 100755 --- a/app/controllers/HomeController.php +++ b/app/controllers/HomeController.php @@ -33,6 +33,15 @@ class HomeController extends BaseController { { return View::make('public.terms'); } + public function showFaq() + { + return View::make('public.faq'); + } + public function showFeatures() + { + return View::make('public.features'); + } + public function doContactUs() { @@ -46,9 +55,10 @@ class HomeController extends BaseController { 'text' => $message ]; - $this->mailer->sendTo(CONTACT_EMAIL, CONTACT_EMAIL, CONTACT_NAME, 'Invoice Ninja Feedback', 'contact', $data); + $this->mailer->sendTo(CONTACT_EMAIL, CONTACT_EMAIL, CONTACT_NAME, 'Invoice Ninja Feedback', 'contact', $data); - Session::flash('message', 'Successfully sent message'); + $message = trans('texts.sent_message'); + Session::flash('message', $message); return Redirect::to('/contact'); } diff --git a/app/controllers/InvoiceController.php b/app/controllers/InvoiceController.php index 37beae47b3b0..1494c077147e 100755 --- a/app/controllers/InvoiceController.php +++ b/app/controllers/InvoiceController.php @@ -132,8 +132,11 @@ class InvoiceController extends \BaseController { return View::make('invoices.deleted'); } - Activity::viewInvoice($invitation); - Event::fire('invoice.viewed', $invoice); + if (!Auth::check() || Auth::user()->account_id != $invoice->account_id) + { + Activity::viewInvoice($invitation); + Event::fire('invoice.viewed', $invoice); + } $client->account->loadLocalizationSettings(); @@ -207,12 +210,6 @@ class InvoiceController extends \BaseController { public static function getViewModel() { - // Temporary fix to let users know to re-upload their logos for higher res - if (Auth::user()->account->getLogoHeight() == 80) - { - Session::flash('warning', "We've increased the logo resolution in the PDF. Please re-upload your logo to take advantage of it."); - } - return [ 'account' => Auth::user()->account, 'products' => Product::scope()->orderBy('id')->get(array('product_key','notes','cost','qty')), @@ -262,7 +259,7 @@ class InvoiceController extends \BaseController { if ($errors = $this->invoiceRepo->getErrors($invoice)) { - Session::flash('error', 'Please make sure to select a client and correct any errors'); + Session::flash('error', trans('texts.invoice_error')); return Redirect::to('invoices/create') ->withInput()->withErrors($errors); @@ -314,12 +311,12 @@ class InvoiceController extends \BaseController { } } - $message = ''; + $message = trans($publicId ? 'texts.updated_invoice' : 'texts.created_invoice'); if ($input->invoice->client->public_id == '-1') { - $message = ' and created client'; - $url = URL::to('clients/' . $client->public_id); + $message = $message . ' ' . trans('texts.and_created_client'); + $url = URL::to('clients/' . $client->public_id); Utils::trackViewed($client->getDisplayName(), ENTITY_CLIENT, $url); } @@ -332,25 +329,18 @@ class InvoiceController extends \BaseController { if (Auth::user()->confirmed) { $this->mailer->sendInvoice($invoice); - Session::flash('message', 'Successfully emailed invoice'.$message); + Session::flash('message', $message); } else { - Session::flash('message', 'Successfully saved invoice'.$message); - - if (Auth::user()->registered) - { - Session::flash('error', 'Please confirm your email address'); - } - else - { - Session::flash('error', 'Please sign up to email an invoice'); - } + $errorMessage = trans(Auth::user()->registered ? 'texts.confirmation_required' : 'texts.registration_required'); + Session::flash('error', $errorMessage); + Session::flash('message', $message); } } else { - Session::flash('message', 'Successfully saved invoice'.$message); + Session::flash('message', $message); } $url = 'invoices/' . $invoice->public_id . '/edit'; @@ -431,7 +421,7 @@ class InvoiceController extends \BaseController { $clone->invoice_items()->save($cloneItem); } - Session::flash('message', 'Successfully cloned invoice'); + Session::flash('message', trans('texts.cloned_invoice')); return Redirect::to('invoices/' . $clone->public_id); } } \ No newline at end of file diff --git a/app/controllers/PaymentController.php b/app/controllers/PaymentController.php index ff9f763d980f..d05e6a6a113a 100755 --- a/app/controllers/PaymentController.php +++ b/app/controllers/PaymentController.php @@ -327,7 +327,7 @@ class PaymentController extends \BaseController Event::fire('invoice.paid', $payment); - Session::flash('message', 'Successfully applied payment'); + Session::flash('message', trans('texts.applied_payment')); return Redirect::to('view/' . $payment->invitation->invitation_key); } else if ($response->isRedirect()) @@ -362,7 +362,7 @@ class PaymentController extends \BaseController Event::fire('invoice.paid', $payment); - Session::flash('message', 'Successfully applied payment'); + Session::flash('message', trans('texts.applied_payment')); return Redirect::to('view/' . $payment->invitation->invitation_key); } else @@ -374,7 +374,9 @@ class PaymentController extends \BaseController } catch (\Exception $e) { - Session::flash('error', $e->getMessage()); + $errorMessage = trans('texts.payment_error'); + Session::flash('error', $errorMessage); + Utils::logError($e->getMessage()); return Redirect::to('payment/' . $invitationKey) ->withInput(); } @@ -431,19 +433,23 @@ class PaymentController extends \BaseController Event::fire('invoice.paid', $payment); - Session::flash('message', 'Successfully applied payment'); + Session::flash('message', trans('texts.applied_payment')); return Redirect::to('view/' . $invitation->invitation_key); } else { - Session::flash('error', $response->getMessage()); - return Utils::fatalError('Sorry, there was an error processing your payment. Please try again later.

', $response->getMessage()); + $errorMessage = trans('texts.payment_error') . "\n\n" . $response->getMessage(); + Session::flash('error', $errorMessage); + Utils::logError($errorMessage); + return Redirect::to('view/' . $invitation->invitation_key); } } catch (\Exception $e) { - Session::flash('error', $e->getMessage()); - return Utils::fatalError('Sorry, there was an error processing your payment. Please try again later.

', $e); + $errorMessage = trans('texts.payment_error'); + Session::flash('error', $errorMessage); + Utils::logError($errorMessage . "\n\n" . $e->getMessage()); + return Redirect::to('view/' . $invitation->invitation_key); } } @@ -471,8 +477,7 @@ class PaymentController extends \BaseController { $this->paymentRepo->save($publicId, Input::all()); - $message = $publicId ? 'Successfully updated payment' : 'Successfully created payment'; - Session::flash('message', $message); + Session::flash('message', trans('texts.created_payment')); return Redirect::to('clients/' . Input::get('client')); } } @@ -485,11 +490,10 @@ class PaymentController extends \BaseController if ($count > 0) { - $message = Utils::pluralize('Successfully '.$action.'d ? payment', $count); + $message = Utils::pluralize($action.'d_payment', $count); Session::flash('message', $message); } return Redirect::to('payments'); } - } \ No newline at end of file diff --git a/app/controllers/UserController.php b/app/controllers/UserController.php index e49828d85bbe..3af275b668b8 100755 --- a/app/controllers/UserController.php +++ b/app/controllers/UserController.php @@ -26,9 +26,9 @@ class UserController extends BaseController { $user->force_pdfjs = true; $user->save(); - Session::flash('message', 'Successfully updated PDF settings'); + Session::flash('message', trans('texts.confide.updated_settings')); - return Redirect::to('/invoices/create'); + return Redirect::to('/dashboard'); } /** @@ -86,6 +86,7 @@ class UserController extends BaseController { if( Confide::user() ) { Event::fire('user.login'); + Session::reflash(); $invoice = Invoice::scope()->orderBy('id', 'desc')->first(); @@ -95,7 +96,7 @@ class UserController extends BaseController { } else { - return Redirect::to('/invoices/create'); + return Redirect::to('/dashboard'); } } else @@ -137,7 +138,7 @@ class UserController extends BaseController { // Check if there was too many login attempts if( Confide::isThrottled( $input ) ) { - $err_msg = Lang::get('confide::confide.alerts.too_many_attempts'); + $err_msg = trans('texts.confide.too_many_attempts'); } /* elseif( $user->checkUserExists( $input ) and ! $user->isConfirmed( $input ) ) @@ -147,7 +148,7 @@ class UserController extends BaseController { */ else { - $err_msg = Lang::get('confide::confide.alerts.wrong_credentials'); + $err_msg = trans('texts.confide.wrong_credentials'); } return Redirect::action('UserController@login') @@ -165,15 +166,13 @@ class UserController extends BaseController { { if ( Confide::confirm( $code ) ) { - $notice_msg = Lang::get('confide::confide.alerts.confirmation'); - return Redirect::action('UserController@login') - ->with( 'notice', $notice_msg ); + $notice_msg = trans('texts.confide.confirmation'); + return Redirect::action('UserController@login')->with( 'message', $notice_msg ); } else { - $error_msg = Lang::get('confide::confide.alerts.wrong_confirmation'); - return Redirect::action('UserController@login') - ->with( 'error', $error_msg ); + $error_msg = trans('texts.confide.wrong_confirmation'); + return Redirect::action('UserController@login')->with( 'error', $error_msg ); } } @@ -194,9 +193,9 @@ class UserController extends BaseController { { Confide::forgotPassword( Input::get( 'email' ) ); - $notice_msg = Lang::get('confide::confide.alerts.password_forgot'); - return Redirect::action('UserController@login') - ->with( 'notice', $notice_msg ); + $notice_msg = trans('texts.confide.password_forgot'); + return Redirect::action('UserController@login') + ->with( 'notice', $notice_msg ); /* @@ -241,15 +240,15 @@ class UserController extends BaseController { // By passing an array with the token, password and confirmation if( Confide::resetPassword( $input ) ) { - $notice_msg = Lang::get('confide::confide.alerts.password_reset'); - return Redirect::action('UserController@login') - ->with( 'notice', $notice_msg ); + $notice_msg = trans('texts.confide.password_reset'); + return Redirect::action('UserController@login') + ->with( 'notice', $notice_msg ); } else { - $error_msg = Lang::get('confide::confide.alerts.wrong_password_reset'); - return Redirect::action('UserController@reset_password', array('token'=>$input['token'])) - ->withInput() + $error_msg = trans('texts.confide.wrong_password_reset'); + return Redirect::action('UserController@reset_password', array('token'=>$input['token'])) + ->withInput() ->with( 'error', $error_msg ); } } diff --git a/app/database/migrations/2014_04_03_191105_add_pro_plan.php b/app/database/migrations/2014_04_03_191105_add_pro_plan.php new file mode 100644 index 000000000000..05f74ebdf40b --- /dev/null +++ b/app/database/migrations/2014_04_03_191105_add_pro_plan.php @@ -0,0 +1,34 @@ +date('pro_plan_paid'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('accounts', function($table) + { + $table->dropColumn('pro_plan_paid'); + }); + } + +} diff --git a/app/filters.php b/app/filters.php index 1cca8a301718..18ed154ca049 100755 --- a/app/filters.php +++ b/app/filters.php @@ -21,9 +21,14 @@ App::before(function($request) } } - if (Auth::check()) - { - App::setLocale(Auth::user()->getLocale()); + if (Input::has('lang')) + { + App::setLocale(Input::get('lang')); + } + else if (Auth::check()) + { + $locale = Session::get(SESSION_LOCALE, DEFUALT_LOCALE); + App::setLocale($locale); } }); diff --git a/app/lang/de/fields.php b/app/lang/de/fields.php deleted file mode 100644 index d1f9dd7f1c57..000000000000 --- a/app/lang/de/fields.php +++ /dev/null @@ -1,54 +0,0 @@ - 'Organisation', - 'name' => 'Name', - 'website' => 'Webseite', - 'work_phone' => 'Telefon', - 'address' => 'Adresse', - 'address1' => 'Straße', - 'address2' => 'Adresszusatz', - 'city' => 'Stadt', - 'state' => 'Bundesland', - 'postal_code' => 'Postleitzahl', - 'country_id' => 'Land', - 'contacts' => 'Kontakte', - 'first_name' => 'Vorname', - 'last_name' => 'Nachname', - 'phone' => 'Telefon', - 'email' => 'Email', - 'additional_info' => 'Zusätzliche Info', - 'payment_terms' => 'Zahlungsbedingungen', - 'currency_id' => 'Währung', - 'size_id' => 'Größe', - 'industry_id' => 'Kategorie', - 'private_notes' => 'Notizen', - - // invoice - 'invoice' => 'Rechnung', - 'client' => 'Kunde', - 'invoice_date' => 'Rechnungsdatum', - 'due_date' => 'Fällig am', - 'invoice_number' => 'Rechungsnummer', - 'invoice_number_short' => 'Rechnung #', - 'po_number' => 'Bestell Nummer', - 'po_number_short' => 'BN #', - 'frequency_id' => 'Wie oft', - 'dicount' => 'Rabatt', - 'taxes' => 'Steuern', - 'tax' => 'Steuer', - 'item' => 'Artikel', - 'description' => 'Beschreibung', - 'unit_cost' => 'Kosten pro Einheit', - 'quantity' => 'Menge', - 'line_total' => 'Summe', - 'subtotal' => 'Zwischensumme', - 'paid_to_date' => 'Zahlungsdatum', - 'balance_due' => 'Rechnungsbetrag', - 'invoice_design_id' => 'Design', - 'terms' => 'Bedingungen', - 'your_invoice' => 'Ihre Rechnung', - -); diff --git a/app/lang/de/texts.php b/app/lang/de/texts.php index b2b291ddaa6a..230c93a9118a 100644 --- a/app/lang/de/texts.php +++ b/app/lang/de/texts.php @@ -20,7 +20,7 @@ return array( 'phone' => 'Telefon', 'email' => 'Email', 'additional_info' => 'Zusätzliche Info', - 'payment_terms' => 'Payment Terms', + 'payment_terms' => 'Zahlungsbedingungen', 'currency_id' => 'Währung', 'size_id' => 'Größe', 'industry_id' => 'Kategorie', @@ -33,7 +33,7 @@ return array( 'due_date' => 'Fällig am', 'invoice_number' => 'Rechungsnummer', 'invoice_number_short' => 'Rechnung #', - 'po_number' => 'Bestell Nummer', + 'po_number' => 'Bestellnummer', 'po_number_short' => 'BN #', 'frequency_id' => 'Wie oft', 'dicount' => 'Rabatt', @@ -51,4 +51,247 @@ return array( 'terms' => 'Bedingungen', 'your_invoice' => 'Ihre Rechnung', + 'remove_contact' => 'Kontakt löschen', + 'add_contact' => 'Kontakt hinzufügen', + 'create_new_client' => 'Einen neuen Kunden erstellen', + 'edit_client_details' => 'Kundendetails bearbeiten', + 'enable' => 'Aktivieren', + 'learn_more' => 'Mehr erfahren', + 'manage_rates' => 'Steuersätze verwalten', + 'note_to_client' => 'Notiz an den Kunden', + 'invoice_terms' => 'Zahlungsbedingungen', + 'save_as_default_terms' => 'Als Standardbedingungen speichern', + 'download_pdf' => 'PDF herunterladen', + 'pay_now' => 'Jetzt bezahlen', + 'save_invoice' => 'Rechnung speichern', + 'clone_invoice' => 'Rechnung duplizieren', + 'archive_invoice' => 'Rechnung archivieren', + 'delete_invoice' => 'Rechnung löschen', + 'email_invoice' => 'Rechnung versenden', + 'enter_payment' => 'Zahlung eingeben', + 'tax_rates' => 'Steuersätze', + 'rate' => 'Satz', + 'settings' => 'Einstellungen', + 'enable_invoice_tax' => 'Enable specifying an invoice tax', + 'enable_line_item_tax' => 'Enable specifying line item taxes', + + // navigation + 'dashboard' => 'Dashboard', + 'clients' => 'Kunden', + 'invoices' => 'Rechnungen', + 'payments' => 'Zahlungen', + 'credits' => 'Guthaben', + 'history' => 'Verlauf', + 'search' => 'Suche', + 'sign_up' => 'Anmeldung', + 'guest' => 'Gast', + 'company_details' => 'Firmendaten', + 'online_payments' => 'Online-Zahlungen', + 'notifications' => 'Benachrichtigungen', + 'import_export' => 'Import/Export', + 'done' => 'Erledigt', + 'save' => 'Speichern', + 'create' => 'Erstellen', + 'upload' => 'Hochladen', + 'import' => 'Importieren', + 'download' => 'Downloaden', + 'cancel' => 'Abbrechen', + 'provide_email' => 'Bitte gebe eine gültige E-Mail Adresse an', + 'powered_by' => 'Powered by', + 'no_items' => 'Keine Objekte', + + // recurring invoices + 'recurring_invoices' => 'Wiederkehrende Rechnungen', + 'recurring_help' => '

Sende deinen Kunden automatisch die selbe Rechnung wöchentlich, zwei-monatlich, monatlich, vierteljährlich oder jährlich.

+

Benutze :MONTH, :QUARTER oder :YEAR für ein dynamisches Datum. Grundlegende Mathematik funktioniert genauso gut, zum Beispiel :MONTH-1.

+

Beispiel zu dynamischen Rechnungs-Variabeln:

+ ', + + // dashboard + 'in_total_revenue' => 'Gesamtumsatz', + 'billed_client' => 'abgerechneter Kunde', + 'billed_clients' => 'abgerechnete Kunden', + 'active_client' => 'aktive Kunden', + 'active_clients' => 'aktive Kunden', + 'invoices_past_due' => 'Fällige Rechnungen', + 'upcoming_invoices' => 'Kommende Rechnungen', + 'average_invoice' => 'Durchschnittlicher Rechnungsbetrag', + + // list pages + 'archive' => 'archivieren', + 'delete' => 'löschen', + 'archive_client' => 'Kunde archivieren', + 'delete_client' => 'Kunde löschen', + 'archive_payment' => 'Zahlung archivieren', + 'delete_payment' => 'Zahlung löschen', + 'archive_credit' => 'Guthaben archivieren', + 'delete_credit' => 'Guthaben löschen', + 'show_archived_deleted' => 'Zeige archivierte/gelöschte', + 'filter' => 'Filter', + 'new_client' => 'Neuer Kunde', + 'new_invoice' => 'Neue Rechnung', + 'new_payment' => 'Neue Zahlung', + 'new_credit' => 'Neues Guthaben', + 'contact' => 'Kontakt', + 'date_created' => 'Erstellungsdatum', + 'last_login' => 'Letzter Login', + 'balance' => 'Saldo', + 'action' => 'Aktion', + 'status' => 'Status', + 'invoice_total' => 'Rechnungsbetrag', + 'frequency' => 'Häufigkeit', + 'start_date' => 'Startdatum', + 'end_date' => 'Enddatum', + 'transaction_reference' => 'Abwicklungsreferenz', + 'method' => 'Verfahren', + 'payment_amount' => 'Zahlungsbetrag', + 'payment_date' => 'Zahlungsdatum', + 'credit_amount' => 'Guthabenbetrag', + 'credit_balance' => 'Guthabenstand', + 'credit_date' => 'Guthabendatum', + 'empty_table' => 'Es sind keine Daten vorhanden', + 'select' => 'Wählen', + 'edit_client' => 'Kunde bearbeiten', + 'edit_invoice' => 'Rechnung bearbeiten', + + // client view page + 'create_invoice' => 'Rechnung bearbeiten', + 'enter_credit' => 'Guthaben eingeben', + 'last_logged_in' => 'Zuletzt eingeloggt', + 'details' => 'Details', + 'standing' => 'Aktueller Stand', + 'credit' => 'Guthaben', + 'activity' => 'Aktivität', + 'date' => 'Datum', + 'message' => 'Nachricht', + 'adjustment' => 'Anpassung', + 'are_you_sure' => 'Bist du dir sicher?', + + // payment pages + 'payment_type_id' => 'Zahlungsart', + 'amount' => 'Betrag', + + // account/company pages + 'work_email' => 'E-Mail', + 'language_id' => 'Sprache', + 'timezone_id' => 'Zeitzone', + 'date_format_id' => 'Datumsformat', + 'datetime_format_id' => 'Datums-/Zeitformat', + 'users' => 'Benutzer', + 'localization' => 'Lokalisierung', + 'remove_logo' => 'Logo entfernen', + 'logo_help' => 'Unterstützt: JPEG, GIF und PNG. Empfohlene Höhe: 120px', + 'payment_gateway' => 'Zahlungseingang', + 'gateway_id' => 'Provider', + 'email_notifications' => 'E-Mail Benachrichtigungen', + 'email_sent' => 'Benachrichtigen, wenn eine Rechnung versendet wurde', + 'email_viewed' => 'Benachrichtigen, wenn eine Rechnung betrachtet wurde', + 'email_paid' => 'Benachrichtigen, wenn eine Rechnung bezahlt wurde', + 'site_updates' => 'Seiten Updates', + 'custom_messages' => 'Benutzerdefinierte Nachrichten', + 'default_invoice_terms' => 'Standard Rechnungsbedingungen', + 'default_email_footer' => 'Standard E-Mail Signatur', + 'import_clients' => 'Importiere Kundendaten', + 'csv_file' => 'Wähle CSV Datei', + 'export_clients' => 'Exportiere Kundendaten', + 'select_file' => 'Bitte wähle eine Datei', + 'first_row_headers' => 'Benutze erste Zeile als Kopfzeile', + 'column' => 'Spalte', + 'sample' => 'Beispiel', + 'import_to' => 'Importieren nach', + 'client_will_create' => 'Kunde wird erstellt', + 'clients_will_create' => 'Kunden werden erstellt', + + // application messages + 'created_client' => 'Kunde erfolgreich angelegt', + 'created_clients' => ':count Kunden erfolgreich angelegt', + 'updated_settings' => 'Einstellungen erfolgreich aktualisiert', + 'removed_logo' => 'Logo erfolgreich entfernt', + 'sent_message' => 'Nachricht erfolgreich versendet', + 'invoice_error' => 'Bitte stelle sicher, dass ein Kunde ausgewählt und alle Fehler behoben wurden', + 'limit_clients' => 'Entschuldige, das überschreitet das Limit von :count Kunden', + 'payment_error' => 'Es ist ein Fehler während der Zahlung aufgetreten. Bitte versuche es später noch einmal.', + 'registration_required' => 'Bitte melde dich an um eine Rechnung zu versenden', + 'confirmation_required' => 'Bitte bestätige deine E-Mail Adresse', + + 'updated_client' => 'Kunde erfolgreich aktualisiert', + 'created_client' => 'Kunde erfolgreich erstellt', + 'archived_client' => 'Kunde erfolgreich archiviert', + 'archived_clients' => ':count Kunden erfolgreich archiviert', + 'deleted_client' => 'Kunde erfolgreich gelöscht', + 'deleted_clients' => ':count Kunden erfolgreich gelöscht', + + 'updated_invoice' => 'Rechnung erfolgreich aktualisiert', + 'created_invoice' => 'Rechnung erfolgreich erstellt', + 'cloned_invoice' => 'Rechnung erfolgreich dupliziert', + 'emailed_invoice' => 'Rechnung erfolgreich versendet', + 'and_created_client' => 'und Kunde erstellt', + 'archived_invoice' => 'Guthaben erfolgreich archiviert', + 'archived_invoices' => ':count Guthaben erfolgreich archiviert', + 'deleted_invoice' => 'Guthaben erfolgreich gelöscht', + 'deleted_invoices' => ':count Guthaben erfolgreich gelöscht', + + 'created_payment' => 'Zahlung erfolgreich erstellt', + 'archived_payment' => 'Zahlung erfolgreich archiviert', + 'archived_payments' => ':count Zahlungen erfolgreich archiviert', + 'deleted_payment' => 'Zahlung erfolgreich gelöscht', + 'deleted_payments' => ':count Zahlungen erfolgreich gelöscht', + 'applied_payment' => 'Zahlung erfolgreich angewandt', + + 'created_credit' => 'Guthaben erfolgreich erstellt', + 'archived_credit' => 'Guthaben erfolgreich archiviert', + 'archived_credits' => ':count Guthaben erfolgreich archiviert', + 'deleted_credit' => 'Guthaben erfolgreich gelöscht', + 'deleted_credits' => ':count Guthaben erfolgreich gelöscht', + + // Emails + 'confirmation_subject' => 'Invoice Ninja Konto Bestätigung', + 'confirmation_header' => 'Konto Bestätigung', + 'confirmation_message' => 'Bitte klicke auf den folgenden Link um dein Konto zu bestätigen.', + 'invoice_subject' => 'Neue Rechnung :invoice', + 'invoice_message' => 'Um Ihre Rechnung über :amount einzusehen, klicken Sie bitte auf den folgenden Link.', + 'payment_subject' => 'Zahlungseingang :invoice', + 'payment_message' => 'Vielen Dank für Ihre Zahlung von :amount.', + 'email_salutation' => 'Sehr geehrte/r :name,', + 'email_signature' => 'Freundliche Grüße,', + 'email_from' => 'Das InvoiceNinja Team', + 'user_email_footer' => 'Um deine E-Mail Benachrichtigungen anzupassen besuche bitte http://www.invoiceninja.com/company/notifications', + 'invoice_link_message' => 'Um deine Kundenrechnung anzuschauen, klicke auf den folgenden Link:', + 'notification_paid_subject' => 'Die Rechnung :invoice wurde von :client bezahlt', + 'notification_sent_subject' => 'Die Rechnung :invoice wurde an :client versendet', + 'notification_viewed_subject' => 'Die Rechnung :invoice wurde von :client angeschaut', + 'notification_paid' => 'Eine Zahlung von :amount wurde von :client bezüglich Rechnung :invoice getätigt.', + 'notification_sent' => 'Dem folgenden Kunden :client wurde die Rechnung :invoice über :amount zugesendet.', + 'notification_viewed' => 'Der folgende Kunde :client hat sich Rechnung :invoice über :amount angesehen.', + 'reset_password' => 'Du kannst dein Passwort zurücksetzen indem du auf den folgenden Link klickst:', + 'reset_password_footer' => 'Wenn du das Zurücksetzen des Passworts nicht beantragt hast benachrichtige bitte unseren Support: ' . CONTACT_EMAIL, + + // Payment page + 'secure_payment' => 'Sichere Zahlung', + 'card_number' => 'Kartennummer', + 'expiration_month' => 'Ablaufmonat', + 'expiration_year' => 'Ablaufjahr', + 'cvv' => 'Kartenprüfziffer', + + // Security alerts + 'confide' => array( + 'too_many_attempts' => 'Zu viele versuche. Bitte versuche es in ein paar Minuten erneut.', + 'wrong_credentials' => 'Falsche E-Mail Adresse oder falsches Passwort.', + 'confirmation' => 'Dein Konto wurde bestätigt!', + 'wrong_confirmation' => 'Falscher Bestätigungscode.', + 'password_forgot' => 'Weitere Informationen um das Passwort zurückzusetzen wurden dir per E-Mail zugeschickt.', + 'password_reset' => 'Dein Passwort wurde erfolgreich geändert.', + 'wrong_password_reset' => 'Ungültiges Passwort. Versuche es erneut', + ), + + // Pro Plan + 'pro_plan' => [ + 'remove_logo' => ':link to remove the Invoice Ninja logo by joining the pro plan', + 'remove_logo_link' => 'Click here', + ], + ); diff --git a/app/lang/en/texts.php b/app/lang/en/texts.php index a4551f1b1dcf..f8614863490e 100644 --- a/app/lang/en/texts.php +++ b/app/lang/en/texts.php @@ -62,6 +62,7 @@ return array( 'invoice_terms' => 'Invoice terms', 'save_as_default_terms' => 'Save as default terms', 'download_pdf' => 'Download PDF', + 'pay_now' => 'Pay Now', 'save_invoice' => 'Save Invoice', 'clone_invoice' => 'Clone Invoice', 'archive_invoice' => 'Archive Invoice', @@ -89,6 +90,11 @@ return array( 'notifications' => 'Notifications', 'import_export' => 'Import/Export', 'done' => 'Done', + 'save' => 'Save', + 'create' => 'Create', + 'upload' => 'Upload', + 'import' => 'Import', + 'download' => 'Download', 'cancel' => 'Cancel', 'provide_email' => 'Please provide a valid email address', 'powered_by' => 'Powered by', @@ -151,4 +157,141 @@ return array( 'select' => 'Select', 'edit_client' => 'Edit Client', 'edit_invoice' => 'Edit Invoice', + + // client view page + 'create_invoice' => 'Create Invoice', + 'enter_credit' => 'Enter Credit', + 'last_logged_in' => 'Last logged in', + 'details' => 'Details', + 'standing' => 'Standing', + 'credit' => 'Credit', + 'activity' => 'Activity', + 'date' => 'Date', + 'message' => 'Message', + 'adjustment' => 'Adjustment', + 'are_you_sure' => 'Are you sure?', + + // payment pages + 'payment_type_id' => 'Payment type', + 'amount' => 'Amount', + + // account/company pages + 'work_email' => 'Email', + 'language_id' => 'Language', + 'timezone_id' => 'Timezone', + 'date_format_id' => 'Date format', + 'datetime_format_id' => 'Date/Time Format', + 'users' => 'Users', + 'localization' => 'Localization', + 'remove_logo' => 'Remove logo', + 'logo_help' => 'Supported: JPEG, GIF and PNG. Recommended height: 120px', + 'payment_gateway' => 'Payment Gateway', + 'gateway_id' => 'Provider', + 'email_notifications' => 'Email Notifications', + 'email_sent' => 'Email me when an invoice is sent', + 'email_viewed' => 'Email me when an invoice is viewed', + 'email_paid' => 'Email me when an invoice is paid', + 'site_updates' => 'Site Updates', + 'custom_messages' => 'Custom Messages', + 'default_invoice_terms' => 'Set default invoice terms', + 'default_email_footer' => 'Set default email signature', + 'import_clients' => 'Import Client Data', + 'csv_file' => 'Select CSV file', + 'export_clients' => 'Export Client Data', + 'select_file' => 'Please select a file', + 'first_row_headers' => 'Use first row as headers', + 'column' => 'Column', + 'sample' => 'Sample', + 'import_to' => 'Import to', + 'client_will_create' => 'client will be created', + 'clients_will_create' => 'clients will be created', + + // application messages + 'created_client' => 'Successfully created client', + 'created_clients' => 'Successfully created :count clients', + 'updated_settings' => 'Successfully updated settings', + 'removed_logo' => 'Successfully removed logo', + 'sent_message' => 'Successfully sent message', + 'invoice_error' => 'Please make sure to select a client and correct any errors', + 'limit_clients' => 'Sorry, this will exceed the limit of :count clients', + 'payment_error' => 'There was an error processing your payment. Please try again later.', + 'registration_required' => 'Please sign up to email an invoice', + 'confirmation_required' => 'Please confirm your email address', + + 'updated_client' => 'Successfully updated client', + 'created_client' => 'Successfully created client', + 'archived_client' => 'Successfully archived client', + 'archived_clients' => 'Successfully archived :count clients', + 'deleted_client' => 'Successfully deleted client', + 'deleted_clients' => 'Successfully deleted :count clients', + + 'updated_invoice' => 'Successfully updated invoice', + 'created_invoice' => 'Successfully created invoice', + 'cloned_invoice' => 'Successfully cloned invoice', + 'emailed_invoice' => 'Successfully emailed invoice', + 'and_created_client' => 'and created client', + 'archived_invoice' => 'Successfully archived credit', + 'archived_invoices' => 'Successfully archived :count credits', + 'deleted_invoice' => 'Successfully deleted credit', + 'deleted_invoices' => 'Successfully deleted :count credits', + + 'created_payment' => 'Successfully created payment', + 'archived_payment' => 'Successfully archived payment', + 'archived_payments' => 'Successfully archived :count payments', + 'deleted_payment' => 'Successfully deleted payment', + 'deleted_payments' => 'Successfully deleted :count payments', + 'applied_payment' => 'Successfully applied payment', + + 'created_credit' => 'Successfully created credit', + 'archived_credit' => 'Successfully archived credit', + 'archived_credits' => 'Successfully archived :count credits', + 'deleted_credit' => 'Successfully deleted credit', + 'deleted_credits' => 'Successfully deleted :count credits', + + // Emails + 'confirmation_subject' => 'Invoice Ninja Account Confirmation', + 'confirmation_header' => 'Account Confirmation', + 'confirmation_message' => 'Please access the link below to confirm your account.', + 'invoice_subject' => 'New invoice :invoice', + 'invoice_message' => 'To view your invoice for :amount, click the link below.', + 'payment_subject' => 'Payment Received :invoice', + 'payment_message' => 'Thank you for your payment of :amount.', + 'email_salutation' => 'Dear :name,', + 'email_signature' => 'Regards,', + 'email_from' => 'The InvoiceNinja Team', + 'user_email_footer' => 'To adjust your email notification settings please visit http://www.invoiceninja.com/company/notifications', + 'invoice_link_message' => 'To view your client invoice click the link below:', + 'notification_paid_subject' => 'Invoice :invoice was paid by :client', + 'notification_sent_subject' => 'Invoice :invoice was sent to :client', + 'notification_viewed_subject' => 'Invoice :invoice was viewed by :client', + 'notification_paid' => 'A payment of :amount was made by client :client towards Invoice :invoice.', + 'notification_sent' => 'The following client :client was emailed Invoice :invoice for :amount.', + 'notification_viewed' => 'The following client :client viewed Invoice :invoice for :amount.', + 'reset_password' => 'You can reset your account password by clicking the following link:', + 'reset_password_footer' => 'If you did not request this password reset please email our support: ' . CONTACT_EMAIL, + + // Payment page + 'secure_payment' => 'Secure Payment', + 'card_number' => 'Card number', + 'expiration_month' => 'Expiration month', + 'expiration_year' => 'Expiration year', + 'cvv' => 'CVV', + + // Security alerts + 'confide' => [ + 'too_many_attempts' => 'Too many attempts. Try again in few minutes.', + 'wrong_credentials' => 'Incorrect email or password.', + 'confirmation' => 'Your account has been confirmed!', + 'wrong_confirmation' => 'Wrong confirmation code.', + 'password_forgot' => 'The information regarding password reset was sent to your email.', + 'password_reset' => 'Your password has been changed successfully.', + 'wrong_password_reset' => 'Invalid password. Try again', + ], + + // Pro Plan + 'pro_plan' => [ + 'remove_logo' => ':link to remove the Invoice Ninja logo by joining the pro plan', + 'remove_logo_link' => 'Click here', + ], + ); \ No newline at end of file diff --git a/app/lang/es/fields.php b/app/lang/es/fields.php deleted file mode 100644 index c5761739d705..000000000000 --- a/app/lang/es/fields.php +++ /dev/null @@ -1,52 +0,0 @@ - 'Organización', - 'name' => 'Nombre', - 'website' => 'Página Web', - 'work_phone' => 'Teléfono', - 'address' => 'Dirección', - 'address1' => 'Calle', - 'address2' => 'Bloq/Pta', - 'city' => 'Ciudad', - 'state' => 'Región/Provincia', - 'postal_code' => 'Código Postal', - 'country_id' => 'País', - 'contacts' => 'Contactos', - 'first_name' => 'Nombre', - 'last_name' => 'Apellidos', - 'phone' => 'Teléfono', - 'email' => 'Email', - 'additional_info' => 'Información extra', - 'payment_terms' => 'Términos de pago', - 'currency_id' => 'Divisa', - 'size_id' => 'Tamaño', - 'industry_id' => 'Industria', - 'private_notes' => 'Notas Privadas', - - // invoice - 'invoice' => 'Factura', - 'client' => 'Clienta', - 'invoice_date' => 'Fecha de factura', - 'due_date' => 'Fecha de pago', - 'invoice_number' => 'Número de Factura', - 'invoice_number_short' => 'Nº de Factura', - 'po_number' => 'Apartado de correos', - 'po_number_short' => 'Apdo.', - 'frequency_id' => 'Fracuencia', - 'discount' => 'Descuento', - 'taxes' => 'Impuestos', - 'tax' => 'Impuesto', - 'item' => 'Elemento', - 'description' => 'Descripción', - 'unit_cost' => 'Coste unitario', - 'quantity' => 'Cantidad', - 'line_total' => 'Total línea', - 'subtotal' => 'Subtotal', - 'paid_to_date' => 'Pagado', - 'balance_due' => 'Pendiente', - 'invoice_design_id' => 'Diseño', - 'terms' => 'Términos', - 'your_invoice' => 'Tu factura', -); diff --git a/app/lang/es/messages.php b/app/lang/es/messages.php deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/app/lang/es/texts.php b/app/lang/es/texts.php new file mode 100644 index 000000000000..728286f3bd3c --- /dev/null +++ b/app/lang/es/texts.php @@ -0,0 +1,297 @@ + 'Organización', + 'name' => 'Nombre', + 'website' => 'Página Web', + 'work_phone' => 'Teléfono', + 'address' => 'Dirección', + 'address1' => 'Calle', + 'address2' => 'Bloq/Pta', + 'city' => 'Ciudad', + 'state' => 'Región/Provincia', + 'postal_code' => 'Código Postal', + 'country_id' => 'País', + 'contacts' => 'Contactos', + 'first_name' => 'Nombre', + 'last_name' => 'Apellidos', + 'phone' => 'Teléfono', + 'email' => 'Email', + 'additional_info' => 'Información extra', + 'payment_terms' => 'Términos de pago', + 'currency_id' => 'Divisa', + 'size_id' => 'Tamaño', + 'industry_id' => 'Industria', + 'private_notes' => 'Notas Privadas', + + // invoice + 'invoice' => 'Factura', + 'client' => 'Clienta', + 'invoice_date' => 'Fecha de factura', + 'due_date' => 'Fecha de pago', + 'invoice_number' => 'Número de Factura', + 'invoice_number_short' => 'Nº de Factura', + 'po_number' => 'Apartado de correos', + 'po_number_short' => 'Apdo.', + 'frequency_id' => 'Fracuencia', + 'discount' => 'Descuento', + 'taxes' => 'Impuestos', + 'tax' => 'Impuesto', + 'item' => 'Elemento', + 'description' => 'Descripción', + 'unit_cost' => 'Coste unitario', + 'quantity' => 'Cantidad', + 'line_total' => 'Total línea', + 'subtotal' => 'Subtotal', + 'paid_to_date' => 'Pagado', + 'balance_due' => 'Pendiente', + 'invoice_design_id' => 'Diseño', + 'terms' => 'Términos', + 'your_invoice' => 'Tu factura', + + 'remove_contact' => 'Remove contact', + 'add_contact' => 'Add contact', + 'create_new_client' => 'Create new client', + 'edit_client_details' => 'Edit client details', + 'enable' => 'Enable', + 'learn_more' => 'Learn more', + 'manage_rates' => 'Manage rates', + 'note_to_client' => 'Note to client', + 'invoice_terms' => 'Invoice terms', + 'save_as_default_terms' => 'Save as default terms', + 'download_pdf' => 'Download PDF', + 'pay_now' => 'Pay Now', + 'save_invoice' => 'Save Invoice', + 'clone_invoice' => 'Clone Invoice', + 'archive_invoice' => 'Archive Invoice', + 'delete_invoice' => 'Delete Invoice', + 'email_invoice' => 'Email Invoice', + 'enter_payment' => 'Enter Payment', + 'tax_rates' => 'Tax Rates', + 'rate' => 'Rate', + 'settings' => 'Settings', + 'enable_invoice_tax' => 'Enable specifying an invoice tax', + 'enable_line_item_tax' => 'Enable specifying line item taxes', + + // navigation + 'dashboard' => 'Dashboard', + 'clients' => 'Clients', + 'invoices' => 'Invoices', + 'payments' => 'Payments', + 'credits' => 'Credits', + 'history' => 'History', + 'search' => 'Search', + 'sign_up' => 'Sign Up', + 'guest' => 'Guest', + 'company_details' => 'Company Details', + 'online_payments' => 'Online Payments', + 'notifications' => 'Notifications', + 'import_export' => 'Import/Export', + 'done' => 'Done', + 'save' => 'Save', + 'create' => 'Create', + 'upload' => 'Upload', + 'import' => 'Import', + 'download' => 'Download', + 'cancel' => 'Cancel', + 'provide_email' => 'Please provide a valid email address', + 'powered_by' => 'Powered by', + 'no_items' => 'No items', + + // recurring invoices + 'recurring_invoices' => 'Recurring Invoices', + 'recurring_help' => '

Automatically send clients the same invoices weekly, bi-monthly, monthly, quarterly or annually.

+

Use :MONTH, :QUARTER or :YEAR for dynamic dates. Basic math works as well, for example :MONTH-1.

+

Examples of dynamic invoice variables:

+ ', + + // dashboard + 'in_total_revenue' => 'in total revenue', + 'billed_client' => 'billed client', + 'billed_clients' => 'billed clients', + 'active_client' => 'active client', + 'active_clients' => 'active clients', + 'invoices_past_due' => 'Invoices Past Due', + 'upcoming_invoices' => 'Upcoming invoices', + 'average_invoice' => 'Average invoice', + + // list pages + 'archive' => 'Archive', + 'delete' => 'Delete', + 'archive_client' => 'Archive client', + 'delete_client' => 'Delete client', + 'archive_payment' => 'Archive payment', + 'delete_payment' => 'Delete payment', + 'archive_credit' => 'Archive credit', + 'delete_credit' => 'Delete credit', + 'show_archived_deleted' => 'Show archived/deleted', + 'filter' => 'Filter', + 'new_client' => 'New Client', + 'new_invoice' => 'New Invoice', + 'new_payment' => 'New Payment', + 'new_credit' => 'New Credit', + 'contact' => 'Contact', + 'date_created' => 'Date Created', + 'last_login' => 'Last Login', + 'balance' => 'Balance', + 'action' => 'Action', + 'status' => 'Status', + 'invoice_total' => 'Invoice Total', + 'frequency' => 'Frequency', + 'start_date' => 'Start Date', + 'end_date' => 'End Date', + 'transaction_reference' => 'Transaction Reference', + 'method' => 'Method', + 'payment_amount' => 'Payment Amount', + 'payment_date' => 'Payment Date', + 'credit_amount' => 'Credit Amount', + 'credit_balance' => 'Credit Balance', + 'credit_date' => 'Credit Date', + 'empty_table' => 'No data available in table', + 'select' => 'Select', + 'edit_client' => 'Edit Client', + 'edit_invoice' => 'Edit Invoice', + + // client view page + 'create_invoice' => 'Create Invoice', + 'enter_credit' => 'Enter Credit', + 'last_logged_in' => 'Last logged in', + 'details' => 'Details', + 'standing' => 'Standing', + 'credit' => 'Credit', + 'activity' => 'Activity', + 'date' => 'Date', + 'message' => 'Message', + 'adjustment' => 'Adjustment', + 'are_you_sure' => 'Are you sure?', + + // payment pages + 'payment_type_id' => 'Payment type', + 'amount' => 'Amount', + + // account/company pages + 'work_email' => 'Email', + 'language_id' => 'Language', + 'timezone_id' => 'Timezone', + 'date_format_id' => 'Date format', + 'datetime_format_id' => 'Date/Time Format', + 'users' => 'Users', + 'localization' => 'Localization', + 'remove_logo' => 'Remove logo', + 'logo_help' => 'Supported: JPEG, GIF and PNG. Recommended height: 120px', + 'payment_gateway' => 'Payment Gateway', + 'gateway_id' => 'Provider', + 'email_notifications' => 'Email Notifications', + 'email_sent' => 'Email me when an invoice is sent', + 'email_viewed' => 'Email me when an invoice is viewed', + 'email_paid' => 'Email me when an invoice is paid', + 'site_updates' => 'Site Updates', + 'custom_messages' => 'Custom Messages', + 'default_invoice_terms' => 'Set default invoice terms', + 'default_email_footer' => 'Set default email signature', + 'import_clients' => 'Import Client Data', + 'csv_file' => 'Select CSV file', + 'export_clients' => 'Export Client Data', + 'select_file' => 'Please select a file', + 'first_row_headers' => 'Use first row as headers', + 'column' => 'Column', + 'sample' => 'Sample', + 'import_to' => 'Import to', + 'client_will_create' => 'client will be created', + 'clients_will_create' => 'clients will be created', + + // application messages + 'created_client' => 'Successfully created client', + 'created_clients' => 'Successfully created :count clients', + 'updated_settings' => 'Successfully updated settings', + 'removed_logo' => 'Successfully removed logo', + 'sent_message' => 'Successfully sent message', + 'invoice_error' => 'Please make sure to select a client and correct any errors', + 'limit_clients' => 'Sorry, this will exceed the limit of :count clients', + 'payment_error' => 'There was an error processing your payment. Please try again later.', + 'registration_required' => 'Please sign up to email an invoice', + 'confirmation_required' => 'Please confirm your email address', + + 'updated_client' => 'Successfully updated client', + 'created_client' => 'Successfully created client', + 'archived_client' => 'Successfully archived client', + 'archived_clients' => 'Successfully archived :count clients', + 'deleted_client' => 'Successfully deleted client', + 'deleted_clients' => 'Successfully deleted :count clients', + + 'updated_invoice' => 'Successfully updated invoice', + 'created_invoice' => 'Successfully created invoice', + 'cloned_invoice' => 'Successfully cloned invoice', + 'emailed_invoice' => 'Successfully emailed invoice', + 'and_created_client' => 'and created client', + 'archived_invoice' => 'Successfully archived credit', + 'archived_invoices' => 'Successfully archived :count credits', + 'deleted_invoice' => 'Successfully deleted credit', + 'deleted_invoices' => 'Successfully deleted :count credits', + + 'created_payment' => 'Successfully created payment', + 'archived_payment' => 'Successfully archived payment', + 'archived_payments' => 'Successfully archived :count payments', + 'deleted_payment' => 'Successfully deleted payment', + 'deleted_payments' => 'Successfully deleted :count payments', + 'applied_payment' => 'Successfully applied payment', + + 'created_credit' => 'Successfully created credit', + 'archived_credit' => 'Successfully archived credit', + 'archived_credits' => 'Successfully archived :count credits', + 'deleted_credit' => 'Successfully deleted credit', + 'deleted_credits' => 'Successfully deleted :count credits', + + // Emails + 'confirmation_subject' => 'Invoice Ninja Account Confirmation', + 'confirmation_header' => 'Account Confirmation', + 'confirmation_message' => 'Please access the link below to confirm your account.', + 'invoice_subject' => 'New invoice :invoice', + 'invoice_message' => 'To view your invoice for :amount, click the link below.', + 'payment_subject' => 'Payment Received :invoice', + 'payment_message' => 'Thank you for your payment of :amount.', + 'email_salutation' => 'Dear :name,', + 'email_signature' => 'Regards,', + 'email_from' => 'The InvoiceNinja Team', + 'user_email_footer' => 'To adjust your email notification settings please visit http://www.invoiceninja.com/company/notifications', + 'invoice_link_message' => 'To view your client invoice click the link below:', + 'notification_paid_subject' => 'Invoice :invoice was paid by :client', + 'notification_sent_subject' => 'Invoice :invoice was sent to :client', + 'notification_viewed_subject' => 'Invoice :invoice was viewed by :client', + 'notification_paid' => 'A payment of :amount was made by client :client towards Invoice :invoice.', + 'notification_sent' => 'The following client :client was emailed Invoice :invoice for :amount.', + 'notification_viewed' => 'The following client :client viewed Invoice :invoice for :amount.', + 'reset_password' => 'You can reset your account password by clicking the following link:', + 'reset_password_footer' => 'If you did not request this password reset please email our support: ' . CONTACT_EMAIL, + + // Payment page + 'secure_payment' => 'Secure Payment', + 'card_number' => 'Card number', + 'expiration_month' => 'Expiration month', + 'expiration_year' => 'Expiration year', + 'cvv' => 'CVV', + + // Security alerts + 'confide' => array( + 'too_many_attempts' => 'Too many attempts. Try again in few minutes.', + 'wrong_credentials' => 'Incorrect email or password.', + 'confirmation' => 'Your account has been confirmed!', + 'wrong_confirmation' => 'Wrong confirmation code.', + 'password_forgot' => 'The information regarding password reset was sent to your email.', + 'password_reset' => 'Your password has been changed successfully.', + 'wrong_password_reset' => 'Invalid password. Try again', + ), + + // Pro Plan + 'pro_plan' => [ + 'remove_logo' => ':link to remove the Invoice Ninja logo by joining the pro plan', + 'remove_logo_link' => 'Click here', + ], + + +); diff --git a/app/lang/fr/texts.php b/app/lang/fr/texts.php index 37dc8e1df81d..0c0d220181d6 100644 --- a/app/lang/fr/texts.php +++ b/app/lang/fr/texts.php @@ -50,5 +50,249 @@ return array( 'invoice_design_id' => 'Design', //if you speak about invoice's design -> "Modèle" 'terms' => 'Conditions', 'your_invoice' => 'Votre Facture', + + 'remove_contact' => 'Remove contact', + 'add_contact' => 'Add contact', + 'create_new_client' => 'Create new client', + 'edit_client_details' => 'Edit client details', + 'enable' => 'Enable', + 'learn_more' => 'Learn more', + 'manage_rates' => 'Manage rates', + 'note_to_client' => 'Note to client', + 'invoice_terms' => 'Invoice terms', + 'save_as_default_terms' => 'Save as default terms', + 'download_pdf' => 'Download PDF', + 'pay_now' => 'Pay Now', + 'save_invoice' => 'Save Invoice', + 'clone_invoice' => 'Clone Invoice', + 'archive_invoice' => 'Archive Invoice', + 'delete_invoice' => 'Delete Invoice', + 'email_invoice' => 'Email Invoice', + 'enter_payment' => 'Enter Payment', + 'tax_rates' => 'Tax Rates', + 'rate' => 'Rate', + 'settings' => 'Settings', + 'enable_invoice_tax' => 'Enable specifying an invoice tax', + 'enable_line_item_tax' => 'Enable specifying line item taxes', + + // navigation + 'dashboard' => 'Dashboard', + 'clients' => 'Clients', + 'invoices' => 'Invoices', + 'payments' => 'Payments', + 'credits' => 'Credits', + 'history' => 'History', + 'search' => 'Search', + 'sign_up' => 'Sign Up', + 'guest' => 'Guest', + 'company_details' => 'Company Details', + 'online_payments' => 'Online Payments', + 'notifications' => 'Notifications', + 'import_export' => 'Import/Export', + 'done' => 'Done', + 'save' => 'Save', + 'create' => 'Create', + 'upload' => 'Upload', + 'import' => 'Import', + 'download' => 'Download', + 'cancel' => 'Cancel', + 'provide_email' => 'Please provide a valid email address', + 'powered_by' => 'Powered by', + 'no_items' => 'No items', + + // recurring invoices + 'recurring_invoices' => 'Recurring Invoices', + 'recurring_help' => '

Automatically send clients the same invoices weekly, bi-monthly, monthly, quarterly or annually.

+

Use :MONTH, :QUARTER or :YEAR for dynamic dates. Basic math works as well, for example :MONTH-1.

+

Examples of dynamic invoice variables:

+ ', + + // dashboard + 'in_total_revenue' => 'in total revenue', + 'billed_client' => 'billed client', + 'billed_clients' => 'billed clients', + 'active_client' => 'active client', + 'active_clients' => 'active clients', + 'invoices_past_due' => 'Invoices Past Due', + 'upcoming_invoices' => 'Upcoming invoices', + 'average_invoice' => 'Average invoice', + // list pages + 'archive' => 'Archive', + 'delete' => 'Delete', + 'archive_client' => 'Archive client', + 'delete_client' => 'Delete client', + 'archive_payment' => 'Archive payment', + 'delete_payment' => 'Delete payment', + 'archive_credit' => 'Archive credit', + 'delete_credit' => 'Delete credit', + 'show_archived_deleted' => 'Show archived/deleted', + 'filter' => 'Filter', + 'new_client' => 'New Client', + 'new_invoice' => 'New Invoice', + 'new_payment' => 'New Payment', + 'new_credit' => 'New Credit', + 'contact' => 'Contact', + 'date_created' => 'Date Created', + 'last_login' => 'Last Login', + 'balance' => 'Balance', + 'action' => 'Action', + 'status' => 'Status', + 'invoice_total' => 'Invoice Total', + 'frequency' => 'Frequency', + 'start_date' => 'Start Date', + 'end_date' => 'End Date', + 'transaction_reference' => 'Transaction Reference', + 'method' => 'Method', + 'payment_amount' => 'Payment Amount', + 'payment_date' => 'Payment Date', + 'credit_amount' => 'Credit Amount', + 'credit_balance' => 'Credit Balance', + 'credit_date' => 'Credit Date', + 'empty_table' => 'No data available in table', + 'select' => 'Select', + 'edit_client' => 'Edit Client', + 'edit_invoice' => 'Edit Invoice', + + // client view page + 'create_invoice' => 'Create Invoice', + 'enter_credit' => 'Enter Credit', + 'last_logged_in' => 'Last logged in', + 'details' => 'Details', + 'standing' => 'Standing', + 'credit' => 'Credit', + 'activity' => 'Activity', + 'date' => 'Date', + 'message' => 'Message', + 'adjustment' => 'Adjustment', + 'are_you_sure' => 'Are you sure?', + + // payment pages + 'payment_type_id' => 'Payment type', + 'amount' => 'Amount', + + // account/company pages + 'work_email' => 'Email', + 'language_id' => 'Language', + 'timezone_id' => 'Timezone', + 'date_format_id' => 'Date format', + 'datetime_format_id' => 'Date/Time Format', + 'users' => 'Users', + 'localization' => 'Localization', + 'remove_logo' => 'Remove logo', + 'logo_help' => 'Supported: JPEG, GIF and PNG. Recommended height: 120px', + 'payment_gateway' => 'Payment Gateway', + 'gateway_id' => 'Provider', + 'email_notifications' => 'Email Notifications', + 'email_sent' => 'Email me when an invoice is sent', + 'email_viewed' => 'Email me when an invoice is viewed', + 'email_paid' => 'Email me when an invoice is paid', + 'site_updates' => 'Site Updates', + 'custom_messages' => 'Custom Messages', + 'default_invoice_terms' => 'Set default invoice terms', + 'default_email_footer' => 'Set default email signature', + 'import_clients' => 'Import Client Data', + 'csv_file' => 'Select CSV file', + 'export_clients' => 'Export Client Data', + 'select_file' => 'Please select a file', + 'first_row_headers' => 'Use first row as headers', + 'column' => 'Column', + 'sample' => 'Sample', + 'import_to' => 'Import to', + 'client_will_create' => 'client will be created', + 'clients_will_create' => 'clients will be created', + + // application messages + 'created_client' => 'Successfully created client', + 'created_clients' => 'Successfully created :count clients', + 'updated_settings' => 'Successfully updated settings', + 'removed_logo' => 'Successfully removed logo', + 'sent_message' => 'Successfully sent message', + 'invoice_error' => 'Please make sure to select a client and correct any errors', + 'limit_clients' => 'Sorry, this will exceed the limit of :count clients', + 'payment_error' => 'There was an error processing your payment. Please try again later.', + 'registration_required' => 'Please sign up to email an invoice', + 'confirmation_required' => 'Please confirm your email address', + + 'updated_client' => 'Successfully updated client', + 'created_client' => 'Successfully created client', + 'archived_client' => 'Successfully archived client', + 'archived_clients' => 'Successfully archived :count clients', + 'deleted_client' => 'Successfully deleted client', + 'deleted_clients' => 'Successfully deleted :count clients', + + 'updated_invoice' => 'Successfully updated invoice', + 'created_invoice' => 'Successfully created invoice', + 'cloned_invoice' => 'Successfully cloned invoice', + 'emailed_invoice' => 'Successfully emailed invoice', + 'and_created_client' => 'and created client', + 'archived_invoice' => 'Successfully archived credit', + 'archived_invoices' => 'Successfully archived :count credits', + 'deleted_invoice' => 'Successfully deleted credit', + 'deleted_invoices' => 'Successfully deleted :count credits', + + 'created_payment' => 'Successfully created payment', + 'archived_payment' => 'Successfully archived payment', + 'archived_payments' => 'Successfully archived :count payments', + 'deleted_payment' => 'Successfully deleted payment', + 'deleted_payments' => 'Successfully deleted :count payments', + 'applied_payment' => 'Successfully applied payment', + + 'created_credit' => 'Successfully created credit', + 'archived_credit' => 'Successfully archived credit', + 'archived_credits' => 'Successfully archived :count credits', + 'deleted_credit' => 'Successfully deleted credit', + 'deleted_credits' => 'Successfully deleted :count credits', + + // Emails + 'confirmation_subject' => 'Invoice Ninja Account Confirmation', + 'confirmation_header' => 'Account Confirmation', + 'confirmation_message' => 'Please access the link below to confirm your account.', + 'invoice_subject' => 'New invoice :invoice', + 'invoice_message' => 'To view your invoice for :amount, click the link below.', + 'payment_subject' => 'Payment Received :invoice', + 'payment_message' => 'Thank you for your payment of :amount.', + 'email_salutation' => 'Dear :name,', + 'email_signature' => 'Regards,', + 'email_from' => 'The InvoiceNinja Team', + 'user_email_footer' => 'To adjust your email notification settings please visit http://www.invoiceninja.com/company/notifications', + 'invoice_link_message' => 'To view your client invoice click the link below:', + 'notification_paid_subject' => 'Invoice :invoice was paid by :client', + 'notification_sent_subject' => 'Invoice :invoice was sent to :client', + 'notification_viewed_subject' => 'Invoice :invoice was viewed by :client', + 'notification_paid' => 'A payment of :amount was made by client :client towards Invoice :invoice.', + 'notification_sent' => 'The following client :client was emailed Invoice :invoice for :amount.', + 'notification_viewed' => 'The following client :client viewed Invoice :invoice for :amount.', + 'reset_password' => 'You can reset your account password by clicking the following link:', + 'reset_password_footer' => 'If you did not request this password reset please email our support: ' . CONTACT_EMAIL, + + // Payment page + 'secure_payment' => 'Secure Payment', + 'card_number' => 'Card number', + 'expiration_month' => 'Expiration month', + 'expiration_year' => 'Expiration year', + 'cvv' => 'CVV', + + // Security alerts + 'confide' => array( + 'too_many_attempts' => 'Too many attempts. Try again in few minutes.', + 'wrong_credentials' => 'Incorrect email or password.', + 'confirmation' => 'Your account has been confirmed!', + 'wrong_confirmation' => 'Wrong confirmation code.', + 'password_forgot' => 'The information regarding password reset was sent to your email.', + 'password_reset' => 'Your password has been changed successfully.', + 'wrong_password_reset' => 'Invalid password. Try again', + ), + + // Pro Plan + 'pro_plan' => [ + 'remove_logo' => ':link to remove the Invoice Ninja logo by joining the pro plan', + 'remove_logo_link' => 'Click here', + ], + + ); diff --git a/app/lang/it/texts.php b/app/lang/it/texts.php index 10f5d738c39a..e8ed6ee7c3e8 100644 --- a/app/lang/it/texts.php +++ b/app/lang/it/texts.php @@ -50,5 +50,250 @@ return array( 'invoice_design_id' => 'Design', 'terms' => 'Terms', 'your_invoice' => 'Your Invoice', + + 'remove_contact' => 'Remove contact', + 'add_contact' => 'Add contact', + 'create_new_client' => 'Create new client', + 'edit_client_details' => 'Edit client details', + 'enable' => 'Enable', + 'learn_more' => 'Learn more', + 'manage_rates' => 'Manage rates', + 'note_to_client' => 'Note to client', + 'invoice_terms' => 'Invoice terms', + 'save_as_default_terms' => 'Save as default terms', + 'download_pdf' => 'Download PDF', + 'pay_now' => 'Pay Now', + 'save_invoice' => 'Save Invoice', + 'clone_invoice' => 'Clone Invoice', + 'archive_invoice' => 'Archive Invoice', + 'delete_invoice' => 'Delete Invoice', + 'email_invoice' => 'Email Invoice', + 'enter_payment' => 'Enter Payment', + 'tax_rates' => 'Tax Rates', + 'rate' => 'Rate', + 'settings' => 'Settings', + 'enable_invoice_tax' => 'Enable specifying an invoice tax', + 'enable_line_item_tax' => 'Enable specifying line item taxes', + + // navigation + 'dashboard' => 'Dashboard', + 'clients' => 'Clients', + 'invoices' => 'Invoices', + 'payments' => 'Payments', + 'credits' => 'Credits', + 'history' => 'History', + 'search' => 'Search', + 'sign_up' => 'Sign Up', + 'guest' => 'Guest', + 'company_details' => 'Company Details', + 'online_payments' => 'Online Payments', + 'notifications' => 'Notifications', + 'import_export' => 'Import/Export', + 'done' => 'Done', + 'save' => 'Save', + 'create' => 'Create', + 'upload' => 'Upload', + 'import' => 'Import', + 'download' => 'Download', + 'cancel' => 'Cancel', + 'provide_email' => 'Please provide a valid email address', + 'powered_by' => 'Powered by', + 'no_items' => 'No items', + + // recurring invoices + 'recurring_invoices' => 'Recurring Invoices', + 'recurring_help' => '

Automatically send clients the same invoices weekly, bi-monthly, monthly, quarterly or annually.

+

Use :MONTH, :QUARTER or :YEAR for dynamic dates. Basic math works as well, for example :MONTH-1.

+

Examples of dynamic invoice variables:

+ ', + + // dashboard + 'in_total_revenue' => 'in total revenue', + 'billed_client' => 'billed client', + 'billed_clients' => 'billed clients', + 'active_client' => 'active client', + 'active_clients' => 'active clients', + 'invoices_past_due' => 'Invoices Past Due', + 'upcoming_invoices' => 'Upcoming invoices', + 'average_invoice' => 'Average invoice', + + // list pages + 'archive' => 'Archive', + 'delete' => 'Delete', + 'archive_client' => 'Archive client', + 'delete_client' => 'Delete client', + 'archive_payment' => 'Archive payment', + 'delete_payment' => 'Delete payment', + 'archive_credit' => 'Archive credit', + 'delete_credit' => 'Delete credit', + 'show_archived_deleted' => 'Show archived/deleted', + 'filter' => 'Filter', + 'new_client' => 'New Client', + 'new_invoice' => 'New Invoice', + 'new_payment' => 'New Payment', + 'new_credit' => 'New Credit', + 'contact' => 'Contact', + 'date_created' => 'Date Created', + 'last_login' => 'Last Login', + 'balance' => 'Balance', + 'action' => 'Action', + 'status' => 'Status', + 'invoice_total' => 'Invoice Total', + 'frequency' => 'Frequency', + 'start_date' => 'Start Date', + 'end_date' => 'End Date', + 'transaction_reference' => 'Transaction Reference', + 'method' => 'Method', + 'payment_amount' => 'Payment Amount', + 'payment_date' => 'Payment Date', + 'credit_amount' => 'Credit Amount', + 'credit_balance' => 'Credit Balance', + 'credit_date' => 'Credit Date', + 'empty_table' => 'No data available in table', + 'select' => 'Select', + 'edit_client' => 'Edit Client', + 'edit_invoice' => 'Edit Invoice', + + // client view page + 'create_invoice' => 'Create Invoice', + 'enter_credit' => 'Enter Credit', + 'last_logged_in' => 'Last logged in', + 'details' => 'Details', + 'standing' => 'Standing', + 'credit' => 'Credit', + 'activity' => 'Activity', + 'date' => 'Date', + 'message' => 'Message', + 'adjustment' => 'Adjustment', + 'are_you_sure' => 'Are you sure?', + + // payment pages + 'payment_type_id' => 'Payment type', + 'amount' => 'Amount', + + // account/company pages + 'work_email' => 'Email', + 'language_id' => 'Language', + 'timezone_id' => 'Timezone', + 'date_format_id' => 'Date format', + 'datetime_format_id' => 'Date/Time Format', + 'users' => 'Users', + 'localization' => 'Localization', + 'remove_logo' => 'Remove logo', + 'logo_help' => 'Supported: JPEG, GIF and PNG. Recommended height: 120px', + 'payment_gateway' => 'Payment Gateway', + 'gateway_id' => 'Provider', + 'email_notifications' => 'Email Notifications', + 'email_sent' => 'Email me when an invoice is sent', + 'email_viewed' => 'Email me when an invoice is viewed', + 'email_paid' => 'Email me when an invoice is paid', + 'site_updates' => 'Site Updates', + 'custom_messages' => 'Custom Messages', + 'default_invoice_terms' => 'Set default invoice terms', + 'default_email_footer' => 'Set default email signature', + 'import_clients' => 'Import Client Data', + 'csv_file' => 'Select CSV file', + 'export_clients' => 'Export Client Data', + 'select_file' => 'Please select a file', + 'first_row_headers' => 'Use first row as headers', + 'column' => 'Column', + 'sample' => 'Sample', + 'import_to' => 'Import to', + 'client_will_create' => 'client will be created', + 'clients_will_create' => 'clients will be created', + + // application messages + 'created_client' => 'Successfully created client', + 'created_clients' => 'Successfully created :count clients', + 'updated_settings' => 'Successfully updated settings', + 'removed_logo' => 'Successfully removed logo', + 'sent_message' => 'Successfully sent message', + 'invoice_error' => 'Please make sure to select a client and correct any errors', + 'limit_clients' => 'Sorry, this will exceed the limit of :count clients', + 'payment_error' => 'There was an error processing your payment. Please try again later.', + 'registration_required' => 'Please sign up to email an invoice', + 'confirmation_required' => 'Please confirm your email address', + + 'updated_client' => 'Successfully updated client', + 'created_client' => 'Successfully created client', + 'archived_client' => 'Successfully archived client', + 'archived_clients' => 'Successfully archived :count clients', + 'deleted_client' => 'Successfully deleted client', + 'deleted_clients' => 'Successfully deleted :count clients', + + 'updated_invoice' => 'Successfully updated invoice', + 'created_invoice' => 'Successfully created invoice', + 'cloned_invoice' => 'Successfully cloned invoice', + 'emailed_invoice' => 'Successfully emailed invoice', + 'and_created_client' => 'and created client', + 'archived_invoice' => 'Successfully archived credit', + 'archived_invoices' => 'Successfully archived :count credits', + 'deleted_invoice' => 'Successfully deleted credit', + 'deleted_invoices' => 'Successfully deleted :count credits', + + 'created_payment' => 'Successfully created payment', + 'archived_payment' => 'Successfully archived payment', + 'archived_payments' => 'Successfully archived :count payments', + 'deleted_payment' => 'Successfully deleted payment', + 'deleted_payments' => 'Successfully deleted :count payments', + 'applied_payment' => 'Successfully applied payment', + + 'created_credit' => 'Successfully created credit', + 'archived_credit' => 'Successfully archived credit', + 'archived_credits' => 'Successfully archived :count credits', + 'deleted_credit' => 'Successfully deleted credit', + 'deleted_credits' => 'Successfully deleted :count credits', + + // Emails + 'confirmation_subject' => 'Invoice Ninja Account Confirmation', + 'confirmation_header' => 'Account Confirmation', + 'confirmation_message' => 'Please access the link below to confirm your account.', + 'invoice_subject' => 'New invoice :invoice', + 'invoice_message' => 'To view your invoice for :amount, click the link below.', + 'payment_subject' => 'Payment Received :invoice', + 'payment_message' => 'Thank you for your payment of :amount.', + 'email_salutation' => 'Dear :name,', + 'email_signature' => 'Regards,', + 'email_from' => 'The InvoiceNinja Team', + 'user_email_footer' => 'To adjust your email notification settings please visit http://www.invoiceninja.com/company/notifications', + 'invoice_link_message' => 'To view your client invoice click the link below:', + 'notification_paid_subject' => 'Invoice :invoice was paid by :client', + 'notification_sent_subject' => 'Invoice :invoice was sent to :client', + 'notification_viewed_subject' => 'Invoice :invoice was viewed by :client', + 'notification_paid' => 'A payment of :amount was made by client :client towards Invoice :invoice.', + 'notification_sent' => 'The following client :client was emailed Invoice :invoice for :amount.', + 'notification_viewed' => 'The following client :client viewed Invoice :invoice for :amount.', + 'reset_password' => 'You can reset your account password by clicking the following link:', + 'reset_password_footer' => 'If you did not request this password reset please email our support: ' . CONTACT_EMAIL, + + // Payment page + 'secure_payment' => 'Secure Payment', + 'card_number' => 'Card number', + 'expiration_month' => 'Expiration month', + 'expiration_year' => 'Expiration year', + 'cvv' => 'CVV', + + // Security alerts + 'confide' => array( + 'too_many_attempts' => 'Too many attempts. Try again in few minutes.', + 'wrong_credentials' => 'Incorrect email or password.', + 'confirmation' => 'Your account has been confirmed!', + 'wrong_confirmation' => 'Wrong confirmation code.', + 'password_forgot' => 'The information regarding password reset was sent to your email.', + 'password_reset' => 'Your password has been changed successfully.', + 'wrong_password_reset' => 'Invalid password. Try again', + ), + + // Pro Plan + 'pro_plan' => [ + 'remove_logo' => ':link to remove the Invoice Ninja logo by joining the pro plan', + 'remove_logo_link' => 'Click here', + ], + + ); \ No newline at end of file diff --git a/app/lang/pt_BR/texts.php b/app/lang/pt_BR/texts.php index a405467cfeb4..880480d7d669 100644 --- a/app/lang/pt_BR/texts.php +++ b/app/lang/pt_BR/texts.php @@ -26,28 +26,261 @@ return array( 'private_notes' => 'Notas Privadas', // invoice - 'invoice' => 'Invoice', - 'client' => 'Client', - 'invoice_date' => 'Invoice Date', - 'due_date' => 'Due Date', - 'invoice_number' => 'Invoice Number', - 'invoice_number_short' => 'Invoice #', - 'po_number' => 'PO Number', - 'po_number_short' => 'PO #', - 'frequency_id' => 'How often', - 'discount' => 'Discount', - 'taxes' => 'Taxes', - 'tax' => 'Tax', + 'invoice' => 'Fatura', + 'client' => 'Cliente', + 'invoice_date' => 'Data da Fatura', + 'due_date' => 'Data de Vencimento', + 'invoice_number' => 'Número da Fatura', + 'invoice_number_short' => 'Fatura #', + 'po_number' => 'Núm. Ordem de Compra', + 'po_number_short' => 'OC #', + 'frequency_id' => 'Quantas vezes', + 'discount' => 'Desconto', + 'taxes' => 'Taxas', + 'tax' => 'Taxa', 'item' => 'Item', - 'description' => 'Description', - 'unit_cost' => 'Unit Cost', - 'quantity' => 'Quantity', - 'line_total' => 'Line Total', + 'description' => 'Descrição', + 'unit_cost' => 'Custo Unitário', + 'quantity' => 'Quantidade', + 'line_total' => 'Linha Total', 'subtotal' => 'Subtotal', - 'paid_to_date' => 'Paid to Date', - 'balance_due' => 'Balance Due', + 'paid_to_date' => 'Pagamento até', + 'balance_due' => 'Saldo Devedor', 'invoice_design_id' => 'Design', - 'terms' => 'Terms', - 'your_invoice' => 'Your Invoice', + 'terms' => 'Termos', + 'your_invoice' => 'Sua Fatura', + + 'remove_contact' => 'Remover contato', + 'add_contact' => 'Adicionar contato', + 'create_new_client' => 'Criar novo cliente', + 'edit_client_details' => 'Editar detalhes do cliente', + 'enable' => 'Habilitar', + 'learn_more' => 'Aprender mais', + 'manage_rates' => 'Gerenciar impostos', + 'note_to_client' => 'Nota para o cliente', + 'invoice_terms' => 'Termos da Fatura', + 'save_as_default_terms' => 'Salvar como termo padrão', + 'download_pdf' => 'Baixar PDF', + 'pay_now' => 'Pagar agora', + 'save_invoice' => 'Salvar Fatura', + 'clone_invoice' => 'Clonar Fatura', + 'archive_invoice' => 'Arquivar Fatura', + 'delete_invoice' => 'Apagar Fatura', + 'email_invoice' => 'Enviar Fatura', + 'enter_payment' => 'Entre com o Pagamento', + 'tax_rates' => 'Taxas de Impostos', + 'rate' => 'Imposto', + 'settings' => 'Configurações', + 'enable_invoice_tax' => 'Permitir especificar a taxa da fatura', + 'enable_line_item_tax' => 'Permitir especificar o item da linha de taxas', + + // navigation + 'dashboard' => 'Painel de Controle', + 'clients' => 'Clientes', + 'invoices' => 'Faturas', + 'payments' => 'Pagamentos', + 'credits' => 'Créditos', + 'history' => 'Histórico', + 'search' => 'Pesquisa', + 'sign_up' => 'Cadastrar', + 'guest' => 'Convidado', + 'company_details' => 'Detalhes da Empresa', + 'online_payments' => 'Pagamentos Online', + 'notifications' => 'Notificações', + 'import_export' => 'Importar/Exportar', + 'done' => 'Feito', + 'save' => 'Salvar', + 'create' => 'Criar', + 'upload' => 'Upload', + 'import' => 'Importar', + 'download' => 'Download', + 'cancel' => 'Cancelar', + 'provide_email' => 'Favor fornecer um endereço de e-mail válido', + 'powered_by' => 'Powered by', + 'no_items' => 'Sem itens', + + // recurring invoices + 'recurring_invoices' => 'Faturas Recorrentes', + 'recurring_help' => '

Enviar automaticamente aos clientes as mesmas faturas semanalmente, mensalmente, bimenstralmente, trimestralmente ou anualmente.

+

Use :MONTH, :QUARTER ou :YEAR para datas dinâmicas. Matemática básica também funciona, por exemplo :MONTH-1.

+

Exemplo de variáveis de uma fatura dinâmica:

+ ', + + // dashboard + 'in_total_revenue' => 'no total de rendimento', + 'billed_client' => 'cliente faturado', + 'billed_clients' => 'clientes faturados', + 'active_client' => 'cliente ativo', + 'active_clients' => 'clientes ativos', + 'invoices_past_due' => 'Faturas Vencidas', + 'upcoming_invoices' => 'Próximas Faturas', + 'average_invoice' => 'Média da fatura', + + // list pages + 'archive' => 'Arquivos', + 'delete' => 'Apagar', + 'archive_client' => 'Arquivar cliente', + 'delete_client' => 'Apagar cliente', + 'archive_payment' => 'Arquivar pagamento', + 'delete_payment' => 'Apagar pagamento', + 'archive_credit' => 'Arquivar crédito', + 'delete_credit' => 'Apagar crédito', + 'show_archived_deleted' => 'Mostrar arquivados/apagados', + 'filter' => 'Filtrar', + 'new_client' => 'Novo Cliente', + 'new_invoice' => 'Nova Fatura', + 'new_payment' => 'Novo Pagamento', + 'new_credit' => 'Novo Crédito', + 'contact' => 'Contato', + 'date_created' => 'Data de Criação', + 'last_login' => 'Último Login', + 'balance' => 'Balanço', + 'action' => 'Ação', + 'status' => 'Status', + 'invoice_total' => 'Total da Fatura', + 'frequency' => 'Frequência', + 'start_date' => 'Data Inicial', + 'end_date' => 'Data Final', + 'transaction_reference' => 'Referência da Transação', + 'method' => 'Método', + 'payment_amount' => 'Qtde do Pagamento', + 'payment_date' => 'Data do Pagamento', + 'credit_amount' => 'Qtde do Crédito', + 'credit_balance' => 'Balanço do Crédito', + 'credit_date' => 'Data do Crédito', + 'empty_table' => 'Sem data disponível na tabela', + 'select' => 'Selecionar', + 'edit_client' => 'Editar Cliente', + 'edit_invoice' => 'Editar Fatura', + + // client view page + 'create_invoice' => 'Criar Fatura', + 'enter_credit' => 'Digitar Crédito', + 'last_logged_in' => 'Último login em', + 'details' => 'Detalhes', + 'standing' => 'Constante', + 'credit' => 'Crédito', + 'activity' => 'Atividade', + 'date' => 'Data', + 'message' => 'Mensagem', + 'adjustment' => 'Ajustes', + 'are_you_sure' => 'Você tem certeza?', + + // payment pages + 'payment_type_id' => 'Tipo de pagamento', + 'amount' => 'Quantidade', + + // account/company pages + 'work_email' => 'Email', + 'language_id' => 'Idioma', + 'timezone_id' => 'Fuso Horário', + 'date_format_id' => 'Formato da Data', + 'datetime_format_id' => 'Formato da Data/Hora', + 'users' => 'Usuários', + 'localization' => 'Localização', + 'remove_logo' => 'Remover logo', + 'logo_help' => 'Suportados: JPEG, GIF and PNG. Altura recomendada: 120px', + 'payment_gateway' => 'Provedor de Pagamento', + 'gateway_id' => 'Provedor', + 'email_notifications' => 'Notificações por Email', + 'email_sent' => 'Me avise por email quando a fatura for enviada', + 'email_viewed' => 'Me avise por email quando a fatura for visualizada', + 'email_paid' => 'Me avise por email quando a fatura for paga', + 'site_updates' => 'Atualizações do Site', + 'custom_messages' => 'Mensagens Customizadas', + 'default_invoice_terms' => 'Definir termos padrões da fatura', + 'default_email_footer' => 'Definir assinatura de email padrão', + 'import_clients' => 'Importar Dados do Cliente', + 'csv_file' => 'Selecionar arquivo CSV', + 'export_clients' => 'Exportar Dados do Cliente', + 'select_file' => 'Favor selecionar um arquivo', + 'first_row_headers' => 'Usar as primeiras linhas como cabeçalho', + 'column' => 'Coluna', + 'sample' => 'Exemplo', + 'import_to' => 'Importar para', + 'client_will_create' => 'cliente será criado', + 'clients_will_create' => 'clientes serão criados', + + // application messages + 'created_client' => 'Cliente criado com sucesso', + 'created_clients' => ':count clientes criados com sucesso', + 'updated_settings' => 'Configurações atualizadas com sucesso', + 'removed_logo' => 'Logo removida com sucesso', + 'sent_message' => 'Mensagem enviada com sucesso', + 'invoice_error' => 'Verifique se você selecionou algum cliente e que não há nenhum outro erro', + 'limit_clients' => 'Desculpe, isto irá exceder o limite de :count clientes', + 'payment_error' => 'Ocorreu um erro ao processar o pagamento. Por favor tente novamente mais tarde.', + 'registration_required' => 'Favor logar-se para enviar uma fatura por email', + 'confirmation_required' => 'Favor confirmar o seu endereço de email', + + 'updated_client' => 'Cliente atualizado com sucesso', + 'created_client' => 'Cliente criado com sucesso', + 'archived_client' => 'Cliente arquivado com sucesso', + 'archived_clients' => ':count clientes arquivados com sucesso', + 'deleted_client' => 'Clientes removidos com sucesso', + 'deleted_clients' => ':count clientes removidos com sucesso', + + 'updated_invoice' => 'Fatura atualizado com sucesso', + 'created_invoice' => 'Fatura criada com sucesso', + 'cloned_invoice' => 'Fatura clonada com sucesso', + 'emailed_invoice' => 'Fatura enviada por email com sucesso', + 'and_created_client' => 'e o cliente foi criado', + 'archived_invoice' => 'Crédito arquivado com sucesso', + 'archived_invoices' => ':count créditos arquivados com sucesso', + 'deleted_invoice' => 'Créditos apagados com sucesso', + 'deleted_invoices' => ':count créditos apagados com sucesso', + + 'created_payment' => 'Pagamento criado com sucesso', + 'archived_payment' => 'Pagamento arquivado com sucesso', + 'archived_payments' => ':count pagamentos arquivados com sucesso', + 'deleted_payment' => 'Pagamento apagado com sucesso', + 'deleted_payments' => ':count pagamentos apagados com sucesso', + 'applied_payment' => 'Pagamentos aplicados com sucesso', + + 'created_credit' => 'Crédito criado com sucesso', + 'archived_credit' => 'Crédito arquivado com sucesso', + 'archived_credits' => ':count créditos arquivados com sucesso', + 'deleted_credit' => 'Crédito apagado com sucesso', + 'deleted_credits' => ':count créditos apagados com sucesso', + + // Emails + 'confirmation_subject' => 'Confirmação de Conta do Invoice Ninja', + 'confirmation_header' => 'Confirmação de Conta', + 'confirmation_message' => 'Favor acessar o link abaixo para confirmar a sua conta.', + 'invoice_subject' => 'Nova fatura :invoice', + 'invoice_message' => 'Para visualizar a sua fatura de :amount, clique no link abaixo.', + 'payment_subject' => 'Recebido Pagamento de :invoice', + 'payment_message' => 'Obrigado pelo seu pagamento de :amount.', + 'email_salutation' => 'Caro :name,', + 'email_signature' => 'Até mais,', + 'email_from' => 'Equipe InvoiceNinja', + 'user_email_footer' => 'Para ajustar suas configurações de notificações de email acesse http://www.invoiceninja.com/company/notifications', + 'invoice_link_message' => 'Para visualizar a fatura do seu cliente clique no link abaixo:', + 'notification_paid_subject' => 'Fatura :invoice foi pago por :client', + 'notification_sent_subject' => 'Fatura :invoice foi enviado por :client', + 'notification_viewed_subject' => 'Fatura :invoice foi visualizada por :client', + 'notification_paid' => 'Um pagamento de :amount foi realizado pelo cliente :client através da fatura :invoice.', + 'notification_sent' => 'O cliente :client foi notificado por email referente à fatura :invoice de :amount.', + 'notification_viewed' => 'O cliente :client visualizou a fatura :invoice de :amount.', + 'reset_password' => 'Você pode redefinir a sua senha clicando no seguinte link:', + 'reset_password_footer' => 'Se você não solicitou a redefinição de sua senha por favor envie um email para o nosso suporte: ' . CONTACT_EMAIL, + + // Payment page + 'secure_payment' => 'Pagamento Seguro', + 'card_number' => 'Número do cartão', + 'expiration_month' => 'Mês de expiração', + 'expiration_year' => 'Ano de expiração', + 'cvv' => 'CVV', + + // Pro Plan + 'pro_plan' => [ + 'remove_logo' => ':link to remove the Invoice Ninja logo by joining the pro plan', + 'remove_logo_link' => 'Click here', + ], + ); diff --git a/app/libraries/utils.php b/app/libraries/utils.php index fa4cf0319c19..1ea423a8db84 100755 --- a/app/libraries/utils.php +++ b/app/libraries/utils.php @@ -5,6 +5,11 @@ class Utils public static function isProd() { return App::environment() == ENV_PRODUCTION; + } + + public static function isNinjaProd() + { + return $_SERVER['SERVER_NAME'] == 'www.invoiceninja.com'; } public static function basePath() @@ -35,7 +40,7 @@ class Utils { if (!$message) { - $message = "An error occurred, please try again later"; + $message = "An error occurred, please try again later."; } static::logError($message . ' ' . $exception); @@ -122,9 +127,9 @@ class Utils public static function pluralize($string, $count) { - $string = str_replace('?', $count, $string); - $field = $count == 1 ? $string : $string . 's'; - return trans("texts.$field"); + $field = $count == 1 ? $string : $string . 's'; + $string = trans("texts.$field", ['count' => $count]); + return $string; } public static function toArray($data) diff --git a/app/models/Account.php b/app/models/Account.php index c69e78137659..bc500de3d6f0 100755 --- a/app/models/Account.php +++ b/app/models/Account.php @@ -39,6 +39,11 @@ class Account extends Eloquent return $this->belongsTo('Timezone'); } + public function language() + { + return $this->belongsTo('Language'); + } + public function date_format() { return $this->belongsTo('DateFormat'); @@ -158,15 +163,22 @@ class Account extends Eloquent } } + public function getLocale() + { + $language = Language::remember(DEFAULT_QUERY_CACHE)->where('id', '=', $this->account->language_id)->first(); + return $language->locale; + } + public function loadLocalizationSettings() { - $this->load('timezone', 'date_format', 'datetime_format'); + $this->load('timezone', 'date_format', 'datetime_format', 'language'); Session::put(SESSION_TIMEZONE, $this->timezone ? $this->timezone->name : DEFAULT_TIMEZONE); Session::put(SESSION_DATE_FORMAT, $this->date_format ? $this->date_format->format : DEFAULT_DATE_FORMAT); Session::put(SESSION_DATE_PICKER_FORMAT, $this->date_format ? $this->date_format->picker_format : DEFAULT_DATE_PICKER_FORMAT); Session::put(SESSION_DATETIME_FORMAT, $this->datetime_format ? $this->datetime_format->format : DEFAULT_DATETIME_FORMAT); Session::put(SESSION_CURRENCY, $this->currency_id ? $this->currency_id : DEFAULT_CURRENCY); + Session::put(SESSION_LOCALE, $this->language_id ? $this->language->locale : DEFUALT_LOCALE); } public function getInvoiceLabels() diff --git a/app/models/Activity.php b/app/models/Activity.php index 5cb9b861b3ca..71eca81be24e 100755 --- a/app/models/Activity.php +++ b/app/models/Activity.php @@ -423,7 +423,7 @@ class Activity extends Eloquent } $activity = Activity::getBlank(); - $activity->client_id = $client->id; + $activity->client_id = $credit->client_id; $activity->credit_id = $credit->id; $activity->activity_type_id = ACTIVITY_TYPE_ARCHIVE_CREDIT; $activity->message = Utils::encodeActivity(Auth::user(), 'archived ' . Utils::formatMoney($credit->balance, $credit->client->currency_id) . ' credit'); diff --git a/app/models/User.php b/app/models/User.php index f9fb73acb83b..caa76ec1ed00 100755 --- a/app/models/User.php +++ b/app/models/User.php @@ -104,10 +104,25 @@ class User extends ConfideUser implements UserInterface, RemindableInterface } } - public function getLocale() + public function isPro() { - $language = Language::remember(DEFAULT_QUERY_CACHE)->where('id', '=', $this->account->language_id)->first(); - return $language->locale; + if (!Auth::check()) + { + return false; + } + + $datePaid = $this->account->pro_plan_paid; + + if (!$datePaid || $datePaid == '0000-00-00') + { + return false; + } + + $today = new DateTime('now'); + $datePaid = DateTime::createFromFormat('Y-m-d', $datePaid); + $interval = $today->diff($datePaid); + + return $interval->y == 0; } public function showGreyBackground() diff --git a/app/ninja/mailers/ContactMailer.php b/app/ninja/mailers/ContactMailer.php index d25dc657a46b..d10405a32c95 100755 --- a/app/ninja/mailers/ContactMailer.php +++ b/app/ninja/mailers/ContactMailer.php @@ -14,7 +14,7 @@ class ContactMailer extends Mailer { public function sendInvoice(Invoice $invoice) { $view = 'invoice'; - $subject = 'New invoice ' . $invoice->invoice_number; + $subject = trans('texts.invoice_subject', ['invoice' => $invoice->invoice_number]); $invoice->load('invitations', 'client', 'account'); @@ -57,7 +57,7 @@ class ContactMailer extends Mailer { public function sendPaymentConfirmation(Payment $payment) { $view = 'payment_confirmation'; - $subject = 'Payment Received ' . $payment->invoice->invoice_number; + $subject = trans('texts.payment_subject', ['invoice' => $payment->invoice->invoice_number]); $data = [ 'accountName' => $payment->account->getDisplayName(), diff --git a/app/ninja/mailers/UserMailer.php b/app/ninja/mailers/UserMailer.php index 4cc7ac65f4bf..ed5f2f3dfd03 100755 --- a/app/ninja/mailers/UserMailer.php +++ b/app/ninja/mailers/UserMailer.php @@ -16,7 +16,7 @@ class UserMailer extends Mailer { } $view = 'confirm'; - $subject = 'Invoice Ninja Account Confirmation'; + $subject = trans('texts.confirmation_subject'); $data = [ 'user' => $user @@ -48,20 +48,7 @@ class UserMailer extends Mailer { $data['paymentAmount'] = Utils::formatMoney($payment->amount, $invoice->client->currency_id); } - if ($type == 'paid') - { - $action = 'paid by'; - } - else if ($type == 'sent') - { - $action = 'sent to'; - } - else - { - $action = 'viewed by'; - } - - $subject = "Invoice {$invoice->invoice_number} was $action {$invoice->client->getDisplayName()}"; + $subject = trans('texts.notification_'.$type.'_subject', ['invoice'=>$invoice->invoice_number, 'client'=>$invoice->client->getDisplayName()]); $this->sendTo($user->email, CONTACT_EMAIL, CONTACT_NAME, $subject, $view, $data); } diff --git a/app/ninja/repositories/InvoiceRepository.php b/app/ninja/repositories/InvoiceRepository.php index 5f31ab7cc2c0..d3ae3497748e 100755 --- a/app/ninja/repositories/InvoiceRepository.php +++ b/app/ninja/repositories/InvoiceRepository.php @@ -176,8 +176,16 @@ class InvoiceRepository $total += $total * $invoice->tax_rate / 100; - $invoice->amount = $total; - $invoice->balance = $total; + if ($publicId) + { + $invoice->balance = $total - ($invoice->amount - $invoice->balance); + } + else + { + $invoice->balance = $total; + } + + $invoice->amount = $total; $invoice->save(); $invoice->invoice_items()->forceDelete(); diff --git a/app/routes.php b/app/routes.php index 0109ed9bf9fb..0ed60c8c673a 100755 --- a/app/routes.php +++ b/app/routes.php @@ -1,6 +1,5 @@ 'auth'), function() Route::get('force_inline_pdf', 'UserController@forcePDFJS'); Route::get('account/getSearchData', array('as' => 'getSearchData', 'uses' => 'AccountController@getSearchData')); + Route::get('account/enable_pro_plan', 'AccountController@enableProPlan'); Route::get('company/{section?}', 'AccountController@showSection'); Route::post('company/{section?}', 'AccountController@doSection'); Route::post('user/setTheme', 'UserController@setTheme'); @@ -159,7 +161,7 @@ HTML::macro('breadcrumbs', function() { $crumb = trim($crumbs[$i]); if (!$crumb) continue; if ($crumb == 'company') return ''; - $name = ucwords($crumb); + $name = trans("texts.$crumb"); if ($i==count($crumbs)-1) { $str .= "
  • $name
  • "; @@ -226,6 +228,7 @@ define('SESSION_DATE_FORMAT', 'dateFormat'); define('SESSION_DATE_PICKER_FORMAT', 'datePickerFormat'); define('SESSION_DATETIME_FORMAT', 'datetimeFormat'); define('SESSION_COUNTER', 'sessionCounter'); +define('SESSION_LOCALE', 'sessionLocale'); define('DEFAULT_TIMEZONE', 'US/Eastern'); define('DEFAULT_CURRENCY', 1); // US Dollar @@ -233,8 +236,10 @@ define('DEFAULT_DATE_FORMAT', 'M j, Y'); define('DEFAULT_DATE_PICKER_FORMAT', 'M d, yyyy'); define('DEFAULT_DATETIME_FORMAT', 'F j, Y, g:i a'); define('DEFAULT_QUERY_CACHE', 120); // minutes +define('DEFUALT_LOCALE', 'en'); define('GATEWAY_PAYPAL_EXPRESS', 17); +define('NINJA_ACCOUNT_KEY', 'zg4ylmzDkdkPOT8yoKQw9LTWaoZJx79h'); if (Auth::check() && !Session::has(SESSION_TIMEZONE)) diff --git a/app/views/accounts/details.blade.php b/app/views/accounts/details.blade.php index bf8df2a95763..823f5743e1a1 100755 --- a/app/views/accounts/details.blade.php +++ b/app/views/accounts/details.blade.php @@ -25,53 +25,53 @@
    - {{ Former::legend('Details') }} + {{ Former::legend('details') }} {{ Former::text('name') }} - {{ Former::text('work_email')->label('Email') }} - {{ Former::text('work_phone')->label('Phone') }} - {{ Former::file('logo')->max(2, 'MB')->accept('image')->inlineHelp('Supported: JPEG, GIF and PNG. Recommended height: 120px') }} + {{ Former::text('work_email') }} + {{ Former::text('work_phone') }} + {{ Former::file('logo')->max(2, 'MB')->accept('image')->inlineHelp(trans('texts.logo_help')) }} @if (file_exists($account->getLogoPath()))
    {{ HTML::image($account->getLogoPath(), "Logo") }}   - Remove logo + {{ trans('texts.remove_logo') }}

    @endif - {{ Former::select('size_id')->addOption('','')->label('Size') + {{ Former::select('size_id')->addOption('','') ->fromQuery($sizes, 'name', 'id') }} - {{ Former::select('industry_id')->addOption('','')->label('Industry') + {{ Former::select('industry_id')->addOption('','') ->fromQuery($industries, 'name', 'id') }} - {{ Former::legend('Address') }} - {{ Former::text('address1')->label('Street') }} - {{ Former::text('address2')->label('Apt/Suite') }} + {{ Former::legend('address') }} + {{ Former::text('address1') }} + {{ Former::text('address2') }} {{ Former::text('city') }} - {{ Former::text('state')->label('State/Province') }} + {{ Former::text('state') }} {{ Former::text('postal_code') }} - {{ Former::select('country_id')->addOption('','')->label('Country') + {{ Former::select('country_id')->addOption('','') ->fromQuery($countries, 'name', 'id') }}
    - {{ Former::legend('Users') }} + {{ Former::legend('users') }} {{ Former::text('first_name') }} {{ Former::text('last_name') }} {{ Former::text('email') }} {{ Former::text('phone') }} - {{ Former::legend('Localization') }} - {{ Former::select('language_id')->addOption('','')->label('Language') + {{ Former::legend('localization') }} + {{ Former::select('language_id')->addOption('','') ->fromQuery($languages, 'name', 'id') }} - {{ Former::select('currency_id')->addOption('','')->label('Currency') + {{ Former::select('currency_id')->addOption('','') ->fromQuery($currencies, 'name', 'id') }} - {{ Former::select('timezone_id')->addOption('','')->label('Timezone') + {{ Former::select('timezone_id')->addOption('','') ->fromQuery($timezones, 'location', 'id') }} - {{ Former::select('date_format_id')->addOption('','')->label('Date Format') + {{ Former::select('date_format_id')->addOption('','') ->fromQuery($dateFormats, 'label', 'id') }} - {{ Former::select('datetime_format_id')->addOption('','')->label('Date/Time Format') + {{ Former::select('datetime_format_id')->addOption('','') ->fromQuery($datetimeFormats, 'label', 'id') }} @@ -79,7 +79,7 @@
    - {{ Button::lg_success_submit('Save')->append_with_icon('floppy-disk') }} + {{ Button::lg_success_submit(trans('texts.save'))->append_with_icon('floppy-disk') }}
    {{ Former::close() }} @@ -95,7 +95,7 @@ }); function deleteLogo() { - if (confirm('Are you sure?')) { + if (confirm("{{ trans('texts.are_you_sure') }}")) { $('.removeLogoForm').submit(); } } diff --git a/app/views/accounts/import_export.blade.php b/app/views/accounts/import_export.blade.php index 1f1e21d030ac..e9a72ee1b2cd 100755 --- a/app/views/accounts/import_export.blade.php +++ b/app/views/accounts/import_export.blade.php @@ -4,14 +4,14 @@ @parent {{ Former::open_for_files('company/import_map')->addClass('col-md-9 col-md-offset-1') }} - {{ Former::legend('Import Client Data') }} - {{ Former::file('file')->label('Select CSV file') }} - {{ Former::actions( Button::lg_info_submit('Upload')->append_with_icon('open') ) }} + {{ Former::legend('import_clients') }} + {{ Former::file('file')->label(trans('texts.csv_file')) }} + {{ Former::actions( Button::lg_info_submit(trans('texts.upload'))->append_with_icon('open') ) }} {{ Former::close() }} {{ Former::open('company/export')->addClass('col-md-9 col-md-offset-1') }} - {{ Former::legend('Export Client Data') }} - {{ Former::actions( Button::lg_primary_submit('Download')->append_with_icon('download-alt') ) }} + {{ Former::legend('export_clients') }} + {{ Former::actions( Button::lg_primary_submit(trans('texts.download'))->append_with_icon('download-alt') ) }} {{ Former::close() }} @stop \ No newline at end of file diff --git a/app/views/accounts/import_map.blade.php b/app/views/accounts/import_map.blade.php index d56146bf95e2..e667cacbcc47 100755 --- a/app/views/accounts/import_map.blade.php +++ b/app/views/accounts/import_map.blade.php @@ -4,20 +4,20 @@ @parent {{ Former::open('company/import_export') }} - {{ Former::legend('Import Clients') }} + {{ Former::legend('import_clients') }} @if ($headers) - - - + + + @for ($i=0; $i @@ -55,11 +55,11 @@ { if (num == 1) { - $('#numClients').html('1 client will be created'); + $('#numClients').html("1 {{ trans('texts.client_will_create') }}"); } else { - $('#numClients').html(num + ' clients will be created'); + $('#numClients').html(num + " {{ trans('texts.clients_will_create') }}"); } } diff --git a/app/views/accounts/notifications.blade.php b/app/views/accounts/notifications.blade.php index 40ae1af08e6e..46a226bd2e12 100755 --- a/app/views/accounts/notifications.blade.php +++ b/app/views/accounts/notifications.blade.php @@ -9,12 +9,12 @@ {{ Former::populateField('notify_viewed', intval(Auth::user()->notify_viewed)) }} {{ Former::populateField('notify_paid', intval(Auth::user()->notify_paid)) }} - {{ Former::legend('Email Notifications') }} - {{ Former::checkbox('notify_sent')->label(' ')->text('Email me when an invoice is sent') }} - {{ Former::checkbox('notify_viewed')->label(' ')->text('Email me when an invoice is viewed') }} - {{ Former::checkbox('notify_paid')->label(' ')->text('Email me when an invoice is paid') }} + {{ Former::legend('email_notifications') }} + {{ Former::checkbox('notify_sent')->label(' ')->text(trans('texts.email_sent')) }} + {{ Former::checkbox('notify_viewed')->label(' ')->text(trans('texts.email_viewed')) }} + {{ Former::checkbox('notify_paid')->label(' ')->text(trans('texts.email_paid')) }} - {{ Former::legend('Site Updates') }} + {{ Former::legend('site_updates') }}
    @@ -36,11 +36,11 @@
    - {{ Former::legend('Custom Messages') }} - {{ Former::textarea('invoice_terms')->label('Set default invoice terms') }} - {{ Former::textarea('email_footer')->label('Set default email signature') }} + {{ Former::legend('custom_messages') }} + {{ Former::textarea('invoice_terms')->label(trans('texts.default_invoice_terms')) }} + {{ Former::textarea('email_footer')->label(trans('texts.default_email_footer')) }} - {{ Former::actions( Button::lg_success_submit('Save')->append_with_icon('floppy-disk') ) }} + {{ Former::actions( Button::lg_success_submit(trans('texts.save'))->append_with_icon('floppy-disk') ) }} {{ Former::close() }} @stop \ No newline at end of file diff --git a/app/views/clients/edit.blade.php b/app/views/clients/edit.blade.php index 75c976d05f94..f957e1802659 100755 --- a/app/views/clients/edit.blade.php +++ b/app/views/clients/edit.blade.php @@ -8,7 +8,7 @@ @section('content')
    - + {{ Former::open($url)->addClass('col-md-12 main_form')->method($method)->rules(array( 'email' => 'email|required' )); }} @@ -25,8 +25,8 @@ {{ Former::text('name')->data_bind("attr { placeholder: placeholderName }") }} {{ Former::text('website') }} {{ Former::text('work_phone') }} - - + + {{ Former::legend('address') }} {{ Former::text('address1') }} {{ Former::text('address2') }} diff --git a/app/views/clients/show.blade.php b/app/views/clients/show.blade.php index c8b5a852954a..328541670489 100755 --- a/app/views/clients/show.blade.php +++ b/app/views/clients/show.blade.php @@ -11,13 +11,13 @@ {{ Former::text('id')->value($client->public_id) }}
    - {{ DropdownButton::normal('Edit Client', + {{ DropdownButton::normal(trans('texts.edit_client'), Navigation::links( [ - ['Edit Client', URL::to('clients/' . $client->public_id . '/edit')], + [trans('texts.edit_client'), URL::to('clients/' . $client->public_id . '/edit')], [Navigation::DIVIDER], - ['Archive Client', "javascript:onArchiveClick()"], - ['Delete Client', "javascript:onDeleteClick()"], + [trans('texts.archive_client'), "javascript:onArchiveClick()"], + [trans('texts.delete_client'), "javascript:onDeleteClick()"], ] ) , ['id'=>'normalDropDown'])->split(); }} @@ -25,9 +25,9 @@ {{ DropdownButton::primary('Create Invoice', Navigation::links( [ - ['Create Invoice', URL::to('invoices/create/' . $client->public_id )], - ['Enter Payment', URL::to('payments/create/' . $client->public_id )], - ['Enter Credit', URL::to('credits/create/' . $client->public_id )], + [trans('texts.create_invoice'), URL::to('invoices/create/' . $client->public_id )], + [trans('texts.enter_payment'), URL::to('payments/create/' . $client->public_id )], + [trans('texts.enter_credit'), URL::to('credits/create/' . $client->public_id )], ] ) , ['id'=>'primaryDropDown'])->split(); }} @@ -39,43 +39,43 @@

    {{ $client->getDisplayName() }}

    @if ($client->last_login > 0)

    - Last logged in {{ Utils::timestampToDateTimeString(strtotime($client->last_login)); }} + {{ trans('texts.last_logged_in') }} {{ Utils::timestampToDateTimeString(strtotime($client->last_login)); }}

    @endif
    -

    Details

    +

    {{ trans('texts.details') }}

    {{ $client->getAddress() }}

    {{ $client->getPhone() }}

    {{ $client->getNotes() }}

    {{ $client->getIndustry() }}

    {{ $client->getWebsite() }}

    -

    {{ $client->payment_terms ? "Payment terms: Net " . $client->payment_terms : '' }}

    +

    {{ $client->payment_terms ? trans('texts.payment_terms') . ": Net " . $client->payment_terms : '' }}

    -

    Contacts

    +

    {{ trans('texts.contacts') }}

    @foreach ($client->contacts as $contact) {{ $contact->getDetails() }} @endforeach
    -

    Standing +

    {{ trans('texts.standing') }}

    ColumnSampleImport To{{ trans('texts.column') }}{{ trans('texts.sample') }}{{ trans('texts.import_to') }}
    - + - + @if ($credit > 0) - + @endif @@ -88,10 +88,10 @@

     

    @@ -99,7 +99,11 @@
    {{ Datatable::table() - ->addColumn('Date', 'Message', 'Balance', 'Adjustment') + ->addColumn( + trans('texts.date'), + trans('texts.message'), + trans('texts.balance'), + trans('texts.adjustment')) ->setUrl(url('api/activities/'. $client->public_id)) ->setOptions('sPaginationType', 'bootstrap') ->setOptions('bFilter', false) @@ -112,7 +116,11 @@ @if ($hasRecurringInvoices) {{ Datatable::table() - ->addColumn('How Often', 'Start Date', 'End Date', 'Invoice Total') + ->addColumn( + trans('texts.frequency_id'), + trans('texts.start_date'), + trans('texts.end_date'), + trans('texts.invoice_total')) ->setUrl(url('api/recurring_invoices/' . $client->public_id)) ->setOptions('sPaginationType', 'bootstrap') ->setOptions('bFilter', false) @@ -121,7 +129,13 @@ @endif {{ Datatable::table() - ->addColumn('Invoice Number', 'Invoice Date', 'Invoice Total', 'Balance Due', 'Due Date', 'Status') + ->addColumn( + trans('texts.invoice_number'), + trans('texts.invoice_date'), + trans('texts.invoice_total'), + trans('texts.balance_due'), + trans('texts.due_date'), + trans('texts.status')) ->setUrl(url('api/invoices/' . $client->public_id)) ->setOptions('sPaginationType', 'bootstrap') ->setOptions('bFilter', false) @@ -132,7 +146,12 @@
    {{ Datatable::table() - ->addColumn('Invoice', 'Transaction Reference', 'Method', 'Payment Amount', 'Payment Date') + ->addColumn( + trans('texts.invoice'), + trans('texts.transaction_reference'), + trans('texts.method'), + trans('texts.payment_amount'), + trans('texts.payment_date')) ->setUrl(url('api/payments/' . $client->public_id)) ->setOptions('sPaginationType', 'bootstrap') ->setOptions('bFilter', false) @@ -143,7 +162,11 @@
    {{ Datatable::table() - ->addColumn('Credit Amount', 'Credit Balance', 'Credit Date', 'Private Notes') + ->addColumn( + trans('texts.credit_amount'), + trans('texts.credit_balance'), + trans('texts.credit_date'), + trans('texts.private_notes')) ->setUrl(url('api/credits/' . $client->public_id)) ->setOptions('sPaginationType', 'bootstrap') ->setOptions('bFilter', false) @@ -170,7 +193,7 @@ } function onDeleteClick() { - if (confirm('Are you sure you want to delete this client?')) { + if (confirm("{{ trans('texts.are_you_sure') }}")) { $('#action').val('delete'); $('.mainForm').submit(); } diff --git a/app/views/credits/edit.blade.php b/app/views/credits/edit.blade.php index 047f792dfd68..0ad2be8217cd 100755 --- a/app/views/credits/edit.blade.php +++ b/app/views/credits/edit.blade.php @@ -19,7 +19,7 @@ {{ Former::select('client')->addOption('', '')->addGroupClass('client-select') }} {{ Former::text('amount') }} {{ Former::text('credit_date')->data_date_format(Session::get(SESSION_DATE_PICKER_FORMAT))->append('') }} - {{-- Former::select('currency_id')->addOption('','')->label('Currency') + {{-- Former::select('currency_id')->addOption('','') ->fromQuery($currencies, 'name', 'id')->select(Session::get(SESSION_CURRENCY, DEFAULT_CURRENCY)) --}} {{ Former::textarea('private_notes') }} @@ -29,8 +29,8 @@
    - {{ Button::lg_primary_submit_success('Save')->append_with_icon('floppy-disk') }} - {{ Button::lg_default_link('credits/' . ($credit ? $credit->public_id : ''), 'Cancel')->append_with_icon('remove-circle'); }} + {{ Button::lg_primary_submit_success(trans('texts.save'))->append_with_icon('floppy-disk') }} + {{ Button::lg_default_link('credits/' . ($credit ? $credit->public_id : ''), trans('texts.cancel'))->append_with_icon('remove-circle'); }}
    {{ Former::close() }} @@ -54,10 +54,7 @@ $clientSelect.combobox(); - - $('#currency_id').combobox(); - $('#credit_date').datepicker('update', new Date({{ strtotime(Utils::today()) * 1000 }})); }); diff --git a/app/views/emails/confirm_html.blade.php b/app/views/emails/confirm_html.blade.php index 2bfdee858910..23ccaa641dcb 100755 --- a/app/views/emails/confirm_html.blade.php +++ b/app/views/emails/confirm_html.blade.php @@ -1,8 +1,9 @@ -

    {{ Lang::get('confide::confide.email.account_confirmation.subject') }}

    +

    {{ trans('texts.confirmation_header') }}

    -

    {{ Lang::get('confide::confide.email.account_confirmation.body') }}

    +{{ trans('texts.confirmation_message') }}

    {{{ URL::to("user/confirm/{$user->confirmation_code}") }}} - +

    -

    {{ Lang::get('confide::confide.email.account_confirmation.farewell') }}

    +{{ trans('texts.email_signature') }}
    +{{ trans('texts.email_from') }} \ No newline at end of file diff --git a/app/views/emails/confirm_text.blade.php b/app/views/emails/confirm_text.blade.php index e21261708ecb..b68919b92961 100644 --- a/app/views/emails/confirm_text.blade.php +++ b/app/views/emails/confirm_text.blade.php @@ -1,6 +1,7 @@ -{{ Lang::get('confide::confide.email.account_confirmation.subject') }} +{{ trans('texts.confirmation_header') }} -{{ Lang::get('confide::confide.email.account_confirmation.body') }} +{{ trans('texts.confirmation_message') }} {{{ URL::to("user/confirm/{$user->confirmation_code}") }}} -{{ Lang::get('confide::confide.email.account_confirmation.farewell') }} \ No newline at end of file +{{ trans('texts.email_signature') }} +{{ trans('texts.email_from') }} \ No newline at end of file diff --git a/app/views/emails/contact_html.blade.php b/app/views/emails/contact_html.blade.php index 63c698ef0734..6ea25fd2b4c8 100644 --- a/app/views/emails/contact_html.blade.php +++ b/app/views/emails/contact_html.blade.php @@ -1,3 +1,3 @@ Name: {{ $name }}
    Email: {{ $email }}

    -Message: {{ $text }} +Message: {{ nl2br($text) }} diff --git a/app/views/emails/contact_text.blade.php b/app/views/emails/contact_text.blade.php index 0cec278d3ef1..628d256f35b3 100644 --- a/app/views/emails/contact_text.blade.php +++ b/app/views/emails/contact_text.blade.php @@ -1,4 +1,4 @@ Name: {{ $name }} Email: {{ $email }} -Message: {{ $text }} +Message: {{ $text }} \ No newline at end of file diff --git a/app/views/emails/invoice_html.blade.php b/app/views/emails/invoice_html.blade.php index 129f7bf15c7a..a8b8627b302c 100755 --- a/app/views/emails/invoice_html.blade.php +++ b/app/views/emails/invoice_html.blade.php @@ -1,5 +1,5 @@ - + @@ -7,14 +7,13 @@ {{ $clientName }},

    - To view your invoice for {{ $invoiceAmount }}, click the link below:

    - + {{ trans('texts.invoice_message', ['amount' => $invoiceAmount]) }}

    {{ $link }}

    @if ($emailFooter) {{ nl2br($emailFooter) }} @else - Best regards,
    + {{ trans('texts.email_signature') }}
    {{ $accountName }} @endif diff --git a/app/views/emails/invoice_paid_html.blade.php b/app/views/emails/invoice_paid_html.blade.php index 5e8a50a84523..ce34e1b134e2 100755 --- a/app/views/emails/invoice_paid_html.blade.php +++ b/app/views/emails/invoice_paid_html.blade.php @@ -1,22 +1,21 @@ - + - Dear {{ $userName }},

    + {{ trans('texts.email_salutation', ['name' => $userName]) }}

    - A payment of {{ $paymentAmount }} was made by client {{ $clientName }} towards invoice {{ $invoiceNumber }}.

    + {{ trans('texts.notification_paid', ['amount' => $paymentAmount, 'client' => $clientName, 'invoice' => $invoiceNumber]) }}

    - To view your client invoice click the link below:
    + {{ trans('texts.invoice_link_message') }}
    {{ $invoiceLink }}

    - - To adjust your email notification settings please click here. - - Regards,

    - - The InvoiceNinja Team + + {{ trans('texts.email_signature') }}
    + {{ trans('texts.email_from') }}

    + {{ trans('texts.user_email_footer') }}

    + \ No newline at end of file diff --git a/app/views/emails/invoice_paid_text.blade.php b/app/views/emails/invoice_paid_text.blade.php index c3f6bce68327..0c7b8bd5b337 100755 --- a/app/views/emails/invoice_paid_text.blade.php +++ b/app/views/emails/invoice_paid_text.blade.php @@ -1,9 +1,11 @@ -Dear {{ $userName }}, +{{ trans('texts.email_salutation', ['name' => $userName]) }} -A payment of {{ $paymentAmount }} was made by client {{ $clientName }} towards invoice {{ $invoiceNumber }}. +{{ trans('texts.notification_paid', ['amount' => $paymentAmount, 'client' => $clientName, 'invoice' => $invoiceNumber]) }} - -To view your client invoice click the link below: +{{ trans('texts.invoice_link_message') }} {{ $invoiceLink }} -To adjust your email notification settings please visit http://www.invoiceninja.com/company/notifications +{{ trans('texts.email_signature') }} +{{ trans('texts.email_from') }} + +{{ trans('texts.user_email_footer') }} \ No newline at end of file diff --git a/app/views/emails/invoice_sent_html.blade.php b/app/views/emails/invoice_sent_html.blade.php index a3c17243d082..6325461a2fac 100755 --- a/app/views/emails/invoice_sent_html.blade.php +++ b/app/views/emails/invoice_sent_html.blade.php @@ -1,19 +1,18 @@ - + - Dear {{ $userName }},

    + {{ trans('texts.email_salutation', ['name' => $userName]) }}

    - The following client {{ $clientName }} was emailed Invoice {{ $invoiceNumber }} for {{ $invoiceAmount}}.

    + {{ trans('texts.notification_sent', ['amount' => $invoiceAmount, 'client' => $clientName, 'invoice' => $invoiceNumber]) }}

    - Regards,

    - - The InvoiceNinja Team

    - - To adjust your email notification settings please click here.

    + {{ trans('texts.email_signature') }}
    + {{ trans('texts.email_from') }}

    + + {{ trans('texts.user_email_footer') }}

    \ No newline at end of file diff --git a/app/views/emails/invoice_sent_text.blade.php b/app/views/emails/invoice_sent_text.blade.php index e78b3d2cacf4..220510138c54 100755 --- a/app/views/emails/invoice_sent_text.blade.php +++ b/app/views/emails/invoice_sent_text.blade.php @@ -1,5 +1,8 @@ -Dear {{ $userName }}, +{{ trans('texts.email_salutation', ['name' => $userName]) }} -The following client {{ $clientName }} was emailed Invoice {{ $invoiceNumber }} for {{ $invoiceAmount}}. +{{ trans('texts.notification_sent', ['amount' => $invoiceAmount, 'client' => $clientName, 'invoice' => $invoiceNumber]) }} -To adjust your email notification settings visit this link http://www.invoiceninja.com/company/notifications \ No newline at end of file +{{ trans('texts.email_signature') }} +{{ trans('texts.email_from') }} + +{{ trans('texts.user_email_footer') }} \ No newline at end of file diff --git a/app/views/emails/invoice_text.blade.php b/app/views/emails/invoice_text.blade.php index 76cdbb72640a..16b24b83d2a6 100755 --- a/app/views/emails/invoice_text.blade.php +++ b/app/views/emails/invoice_text.blade.php @@ -1,12 +1,11 @@ {{ $clientName }}, -To view your invoice for {{ $invoiceAmount }}, click the link below: - +{{ trans('texts.invoice_message', ['amount' => $invoiceAmount]) }} {{ $link }} @if ($emailFooter) {{ $emailFooter }} @else -Best regards, +{{ trans('texts.email_signature') }} {{ $accountName }} @endif \ No newline at end of file diff --git a/app/views/emails/invoice_viewed_html.blade.php b/app/views/emails/invoice_viewed_html.blade.php index 41a239b0dd12..6908c66d01cf 100755 --- a/app/views/emails/invoice_viewed_html.blade.php +++ b/app/views/emails/invoice_viewed_html.blade.php @@ -5,15 +5,14 @@ - Dear {{ $userName }},

    + {{ trans('texts.email_salutation', ['name' => $userName]) }}

    - The following client {{ $clientName }} viewed Invoice {{ $invoiceNumber }} for {{ $invoiceAmount}}.

    + {{ trans('texts.notification_viewed', ['amount' => $invoiceAmount, 'client' => $clientName, 'invoice' => $invoiceNumber]) }}

    - Regards,

    - - The InvoiceNinja Team

    - - To adjust your email notification settings please click here.

    + {{ trans('texts.email_signature') }}
    + {{ trans('texts.email_from') }}

    + + {{ trans('texts.user_email_footer') }}

    \ No newline at end of file diff --git a/app/views/emails/invoice_viewed_text.blade.php b/app/views/emails/invoice_viewed_text.blade.php index d194c8e1e87f..380eaf11451b 100755 --- a/app/views/emails/invoice_viewed_text.blade.php +++ b/app/views/emails/invoice_viewed_text.blade.php @@ -1,9 +1,8 @@ -Dear {{ $userName }}, +{{ trans('texts.email_salutation', ['name' => $userName]) }} -The following client {{ $clientName }} viewed Invoice {{ $invoiceNumber }} for {{ $invoiceAmount }}. +{{ trans('texts.notification_viewed', ['amount' => $invoiceAmount, 'client' => $clientName, 'invoice' => $invoiceNumber]) }} -Regards, +{{ trans('texts.email_signature') }} +{{ trans('texts.email_from') }} -The InvoiceNinja Team - -To adjust your email notification settings visit this link http://www.invoiceninja.com/company/notifications \ No newline at end of file +{{ trans('texts.user_email_footer') }} \ No newline at end of file diff --git a/app/views/emails/passwordreset_html.blade.php b/app/views/emails/passwordreset_html.blade.php index fd259d328e83..52ad2763ed5f 100644 --- a/app/views/emails/passwordreset_html.blade.php +++ b/app/views/emails/passwordreset_html.blade.php @@ -1,8 +1,9 @@ -Hi there! {{ $user->username }}

    +{{ trans('texts.email_salutation', ['name' => $user->username]) }}

    -You can reset your account password by clicking the following link {{{ (Confide::checkAction('UserController@reset_password', array($token))) ? : URL::to('user/reset/'.$token) }}}

    +{{ trans('texts.reset_password') }}
    +{{{ (Confide::checkAction('UserController@reset_password', array($token))) ? : URL::to('user/reset/'.$token) }}}

    -Regards,
    -The InvoiceNinja Team

    +{{ trans('texts.email_signature') }}
    +{{ trans('texts.email_from') }}

    -If you did not request this password reset please email our support: admin@invoiceninja.com

    +{{ trans('texts.reset_password_footer') }}

    \ No newline at end of file diff --git a/app/views/emails/payment_confirmation_html.blade.php b/app/views/emails/payment_confirmation_html.blade.php index ef73ee755351..8ab71a0312bc 100644 --- a/app/views/emails/payment_confirmation_html.blade.php +++ b/app/views/emails/payment_confirmation_html.blade.php @@ -1,5 +1,5 @@ - + @@ -7,12 +7,12 @@ {{ $clientName }},

    - Thank you for your payment of {{ $paymentAmount }}.

    + {{ trans('texts.payment_message', ['amount' => $paymentAmount]) }}

    @if ($emailFooter) {{ nl2br($emailFooter) }} @else - Best regards,
    + {{ trans('texts.email_signature') }}
    {{ $accountName }} @endif diff --git a/app/views/emails/payment_confirmation_text.blade.php b/app/views/emails/payment_confirmation_text.blade.php index dc5a9d7eade2..b742efb5c107 100644 --- a/app/views/emails/payment_confirmation_text.blade.php +++ b/app/views/emails/payment_confirmation_text.blade.php @@ -1,10 +1,10 @@ {{ $clientName }}, -Thank you for your payment of {{ $paymentAmount }}. +{{ trans('texts.payment_message', ['amount' => $paymentAmount]) }} @if ($emailFooter) {{ $emailFooter }} @else -Best regards, +{{ trans('texts.email_signature') }} {{ $accountName }} @endif \ No newline at end of file diff --git a/app/views/emails/welcome_html.blade.php b/app/views/emails/welcome_html.blade.php deleted file mode 100755 index cbd24d06043d..000000000000 --- a/app/views/emails/welcome_html.blade.php +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - -

    Welcome

    - - - \ No newline at end of file diff --git a/app/views/emails/welcome_text.blade.php b/app/views/emails/welcome_text.blade.php deleted file mode 100755 index 01f3f00c6337..000000000000 --- a/app/views/emails/welcome_text.blade.php +++ /dev/null @@ -1 +0,0 @@ -Welcome \ No newline at end of file diff --git a/app/views/header.blade.php b/app/views/header.blade.php index 4772d57de54f..16d3744be515 100755 --- a/app/views/header.blade.php +++ b/app/views/header.blade.php @@ -3,507 +3,502 @@ @section('head') - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - + body { + /* background-color: #F6F6F6; */ + background-color: #EEEEEE; + } - + @stop @section('body') - -

     

    -

     

    - - - +
    +
    -
    -
    - @if (!isset($showBreadcrumbs) || $showBreadcrumbs) - {{ HTML::breadcrumbs() }} + {{ HTML::breadcrumbs() }} @endif @if (Session::has('warning')) -
    {{ Session::get('warning') }}
    +
    {{ Session::get('warning') }}
    @endif @if (Session::has('message')) -
    {{ Session::get('message') }}
    +
    {{ Session::get('message') }}
    @endif @if (Session::has('error')) -
    {{ Session::get('error') }}
    +
    {{ Session::get('error') }}
    @endif - @yield('content') + @yield('content') -
    -
    - +
    + -
    -
    + + +
    +
    +
    - @if (!Auth::check() || !Auth::user()->registered) -
    Paid to Date{{ trans('texts.paid_to_date') }} {{ Utils::formatMoney($client->paid_to_date, $client->currency_id); }}
    Balance{{ trans('texts.balance') }} {{ Utils::formatMoney($client->balance, $client->currency_id); }}
    Credit{{ trans('texts.credit') }} {{ Utils::formatMoney($credit, $client->currency_id); }}