Merge remote-tracking branch 'upstream/develop' into wepay-integration

This commit is contained in:
Joshua Dwire 2016-05-17 15:07:53 -04:00
commit 4f3bb7eeb4
59 changed files with 1385 additions and 1336 deletions

View File

@ -60,7 +60,7 @@ API_SECRET=password
# If this is set to anything, the URL secret will be set the next # If this is set to anything, the URL secret will be set the next
# time a file is downloaded through the client portal. # time a file is downloaded through the client portal.
# Only set this temporarily, as it slows things down. # Only set this temporarily, as it slows things down.
#RACKSPACE_TEMP_URL_SECRET_SET= #RACKSPACE_TEMP_URL_SECRET_SET=
#DOCUMENT_FILESYSTEM= #DOCUMENT_FILESYSTEM=
@ -79,4 +79,4 @@ WEPAY_APP_FEE_MULTIPLIER=0.002
WEPAY_APP_FEE_FIXED=0 WEPAY_APP_FEE_FIXED=0
# See https://www.wepay.com/developer/reference/structures#theme # See https://www.wepay.com/developer/reference/structures#theme
WEPAY_THEME={"name":"Invoice Ninja","primary_color":"0b4d78","secondary_color":"0b4d78","background_color":"f8f8f8","button_color":"33b753"}')); WEPAY_THEME='{"name":"Invoice Ninja","primary_color":"0b4d78","secondary_color":"0b4d78","background_color":"f8f8f8","button_color":"33b753"}'

View File

@ -403,17 +403,9 @@ class AccountController extends BaseController
private function showBankAccounts() private function showBankAccounts()
{ {
$account = Auth::user()->account; return View::make('accounts.banks', [
$account->load('bank_accounts'); 'title' => trans('texts.bank_accounts')
$count = count($account->bank_accounts); ]);
if ($count == 0) {
return Redirect::to('bank_accounts/create');
} else {
return View::make('accounts.banks', [
'title' => trans('texts.bank_accounts')
]);
}
} }
private function showOnlinePayments() private function showOnlinePayments()

View File

@ -13,12 +13,14 @@ use stdClass;
use Crypt; use Crypt;
use URL; use URL;
use Utils; use Utils;
use File;
use App\Models\Gateway; use App\Models\Gateway;
use App\Models\Account; use App\Models\Account;
use App\Models\BankAccount; use App\Models\BankAccount;
use App\Ninja\Repositories\BankAccountRepository; use App\Ninja\Repositories\BankAccountRepository;
use App\Services\BankAccountService; use App\Services\BankAccountService;
use App\Http\Requests\CreateBankAccountRequest; use App\Http\Requests\CreateBankAccountRequest;
use Illuminate\Http\Request;
class BankAccountController extends BaseController class BankAccountController extends BaseController
{ {
@ -122,4 +124,28 @@ class BankAccountController extends BaseController
return $this->bankAccountService->importExpenses($bankId, Input::all()); return $this->bankAccountService->importExpenses($bankId, Input::all());
} }
public function showImportOFX()
{
return view('accounts.import_ofx');
}
public function doImportOFX(Request $request)
{
$file = File::get($request->file('ofx_file'));
try {
$data = $this->bankAccountService->parseOFX($file);
} catch (\Exception $e) {
Session::flash('error', trans('texts.ofx_parse_failed'));
return view('accounts.import_ofx');
}
$data = [
'banks' => null,
'bankAccount' => null,
'transactions' => json_encode([$data])
];
return View::make('accounts.bank_account', $data);
}
} }

View File

@ -61,40 +61,36 @@ class BaseAPIController extends Controller
} }
$this->serializer = Request::get('serializer') ?: API_SERIALIZER_ARRAY; $this->serializer = Request::get('serializer') ?: API_SERIALIZER_ARRAY;
if ($this->serializer === API_SERIALIZER_JSON) { if ($this->serializer === API_SERIALIZER_JSON) {
$this->manager->setSerializer(new JsonApiSerializer()); $this->manager->setSerializer(new JsonApiSerializer());
} else { } else {
$this->manager->setSerializer(new ArraySerializer()); $this->manager->setSerializer(new ArraySerializer());
} }
if (Utils::isNinjaDev()) {
\DB::enableQueryLog();
}
} }
protected function handleAction($request) protected function handleAction($request)
{ {
$entity = $request->entity(); $entity = $request->entity();
$action = $request->action; $action = $request->action;
$repo = Utils::toCamelCase($this->entityType) . 'Repo'; $repo = Utils::toCamelCase($this->entityType) . 'Repo';
$this->$repo->$action($entity); $this->$repo->$action($entity);
return $this->itemResponse($entity); return $this->itemResponse($entity);
} }
protected function listResponse($query) protected function listResponse($query)
{ {
$transformerClass = EntityModel::getTransformerName($this->entityType); $transformerClass = EntityModel::getTransformerName($this->entityType);
$transformer = new $transformerClass(Auth::user()->account, Input::get('serializer')); $transformer = new $transformerClass(Auth::user()->account, Input::get('serializer'));
$includes = $transformer->getDefaultIncludes(); $includes = $transformer->getDefaultIncludes();
$includes = $this->getRequestIncludes($includes); $includes = $this->getRequestIncludes($includes);
$query->with($includes); $query->with($includes);
if ($updatedAt = Input::get('updated_at')) { if ($updatedAt = Input::get('updated_at')) {
$updatedAt = date('Y-m-d H:i:s', $updatedAt); $updatedAt = date('Y-m-d H:i:s', $updatedAt);
$query->where(function($query) use ($includes, $updatedAt) { $query->where(function($query) use ($includes, $updatedAt) {
@ -106,14 +102,14 @@ class BaseAPIController extends Controller
} }
}); });
} }
if ($clientPublicId = Input::get('client_id')) { if ($clientPublicId = Input::get('client_id')) {
$filter = function($query) use ($clientPublicId) { $filter = function($query) use ($clientPublicId) {
$query->where('public_id', '=', $clientPublicId); $query->where('public_id', '=', $clientPublicId);
}; };
$query->whereHas('client', $filter); $query->whereHas('client', $filter);
} }
if ( ! Utils::hasPermission('view_all')){ if ( ! Utils::hasPermission('view_all')){
if ($this->entityType == ENTITY_USER) { if ($this->entityType == ENTITY_USER) {
$query->where('id', '=', Auth::user()->id); $query->where('id', '=', Auth::user()->id);
@ -121,7 +117,7 @@ class BaseAPIController extends Controller
$query->where('user_id', '=', Auth::user()->id); $query->where('user_id', '=', Auth::user()->id);
} }
} }
$data = $this->createCollection($query, $transformer, $this->entityType); $data = $this->createCollection($query, $transformer, $this->entityType);
return $this->response($data); return $this->response($data);
@ -130,10 +126,10 @@ class BaseAPIController extends Controller
protected function itemResponse($item) protected function itemResponse($item)
{ {
$transformerClass = EntityModel::getTransformerName($this->entityType); $transformerClass = EntityModel::getTransformerName($this->entityType);
$transformer = new $transformerClass(Auth::user()->account, Input::get('serializer')); $transformer = new $transformerClass(Auth::user()->account, Input::get('serializer'));
$data = $this->createItem($item, $transformer, $this->entityType); $data = $this->createItem($item, $transformer, $this->entityType);
return $this->response($data); return $this->response($data);
} }
@ -160,18 +156,12 @@ class BaseAPIController extends Controller
} else { } else {
$resource = new Collection($query, $transformer, $entityType); $resource = new Collection($query, $transformer, $entityType);
} }
return $this->manager->createData($resource)->toArray(); return $this->manager->createData($resource)->toArray();
} }
protected function response($response) protected function response($response)
{ {
if (Utils::isNinjaDev()) {
$count = count(\DB::getQueryLog());
Log::info(Request::method() . ' - ' . Request::url() . ": $count queries");
Log::info(json_encode(\DB::getQueryLog()));
}
$index = Request::get('index') ?: 'data'; $index = Request::get('index') ?: 'data';
if ($index == 'none') { if ($index == 'none') {
@ -222,7 +212,7 @@ class BaseAPIController extends Controller
$data[] = $include; $data[] = $include;
} }
} }
return $data; return $data;
} }
} }

View File

@ -10,7 +10,7 @@ use Utils;
class BaseController extends Controller class BaseController extends Controller
{ {
use DispatchesJobs, AuthorizesRequests; use DispatchesJobs, AuthorizesRequests;
protected $entityType; protected $entityType;
/** /**

View File

@ -1,7 +1,7 @@
<?php namespace App\Http\Controllers; <?php namespace App\Http\Controllers;
use App\Models\Expense; use App\Models\Expense;
use app\Ninja\Repositories\ExpenseRepository; use App\Ninja\Repositories\ExpenseRepository;
use App\Ninja\Transformers\ExpenseTransformer; use App\Ninja\Transformers\ExpenseTransformer;
use App\Services\ExpenseService; use App\Services\ExpenseService;
use Utils; use Utils;

View File

@ -60,7 +60,7 @@ class PublicClientController extends BaseController
]); ]);
} }
if (!Input::has('phantomjs') && !Input::has('silent') && !Session::has($invitationKey) if (!Input::has('phantomjs') && !Input::has('silent') && !Session::has($invitationKey)
&& (!Auth::check() || Auth::user()->account_id != $invoice->account_id)) { && (!Auth::check() || Auth::user()->account_id != $invoice->account_id)) {
if ($invoice->is_quote) { if ($invoice->is_quote) {
event(new QuoteInvitationWasViewed($invoice, $invitation)); event(new QuoteInvitationWasViewed($invoice, $invitation));
@ -73,7 +73,7 @@ class PublicClientController extends BaseController
Session::put('invitation_key', $invitationKey); // track current invitation Session::put('invitation_key', $invitationKey); // track current invitation
$account->loadLocalizationSettings($client); $account->loadLocalizationSettings($client);
$invoice->invoice_date = Utils::fromSqlDate($invoice->invoice_date); $invoice->invoice_date = Utils::fromSqlDate($invoice->invoice_date);
$invoice->due_date = Utils::fromSqlDate($invoice->due_date); $invoice->due_date = Utils::fromSqlDate($invoice->due_date);
$invoice->features = [ $invoice->features = [
@ -82,7 +82,7 @@ class PublicClientController extends BaseController
'invoice_settings' => $account->hasFeature(FEATURE_INVOICE_SETTINGS), 'invoice_settings' => $account->hasFeature(FEATURE_INVOICE_SETTINGS),
]; ];
$invoice->invoice_fonts = $account->getFontsData(); $invoice->invoice_fonts = $account->getFontsData();
if ($invoice->invoice_design_id == CUSTOM_DESIGN) { if ($invoice->invoice_design_id == CUSTOM_DESIGN) {
$invoice->invoice_design->javascript = $account->custom_design; $invoice->invoice_design->javascript = $account->custom_design;
} else { } else {
@ -149,10 +149,10 @@ class PublicClientController extends BaseController
'checkoutComDebug' => $checkoutComDebug, 'checkoutComDebug' => $checkoutComDebug,
'phantomjs' => Input::has('phantomjs'), 'phantomjs' => Input::has('phantomjs'),
); );
if($account->hasFeature(FEATURE_DOCUMENTS) && $this->canCreateZip()){ if($account->hasFeature(FEATURE_DOCUMENTS) && $this->canCreateZip()){
$zipDocs = $this->getInvoiceZipDocuments($invoice, $size); $zipDocs = $this->getInvoiceZipDocuments($invoice, $size);
if(count($zipDocs) > 1){ if(count($zipDocs) > 1){
$data['documentsZipURL'] = URL::to("client/documents/{$invitation->invitation_key}"); $data['documentsZipURL'] = URL::to("client/documents/{$invitation->invitation_key}");
$data['documentsZipSize'] = $size; $data['documentsZipSize'] = $size;
@ -173,6 +173,7 @@ class PublicClientController extends BaseController
foreach ($paymentMethods as $paymentMethod) { foreach ($paymentMethods as $paymentMethod) {
if ($paymentMethod->payment_type_id != PAYMENT_TYPE_ACH || $paymentMethod->status == PAYMENT_METHOD_STATUS_VERIFIED) { if ($paymentMethod->payment_type_id != PAYMENT_TYPE_ACH || $paymentMethod->status == PAYMENT_METHOD_STATUS_VERIFIED) {
$code = htmlentities(str_replace(' ', '', strtolower($paymentMethod->payment_type->name))); $code = htmlentities(str_replace(' ', '', strtolower($paymentMethod->payment_type->name)));
$html = '';
if ($paymentMethod->payment_type_id == PAYMENT_TYPE_ACH) { if ($paymentMethod->payment_type_id == PAYMENT_TYPE_ACH) {
if ($paymentMethod->bank_data) { if ($paymentMethod->bank_data) {
@ -303,7 +304,7 @@ class PublicClientController extends BaseController
$data['braintreeClientToken'] = $this->paymentService->getBraintreeClientToken($account); $data['braintreeClientToken'] = $this->paymentService->getBraintreeClientToken($account);
} }
} }
return response()->view('invited.dashboard', $data); return response()->view('invited.dashboard', $data);
} }
@ -323,9 +324,9 @@ class PublicClientController extends BaseController
$data = [ $data = [
'client' => Utils::getClientDisplayName($model), 'client' => Utils::getClientDisplayName($model),
'user' => $model->is_system ? ('<i>' . trans('texts.system') . '</i>') : ($model->user_first_name . ' ' . $model->user_last_name), 'user' => $model->is_system ? ('<i>' . trans('texts.system') . '</i>') : ($model->user_first_name . ' ' . $model->user_last_name),
'invoice' => trans('texts.invoice') . ' ' . $model->invoice, 'invoice' => $model->invoice,
'contact' => Utils::getClientDisplayName($model), 'contact' => Utils::getClientDisplayName($model),
'payment' => trans('texts.payment') . ($model->payment ? ' ' . $model->payment : ''), 'payment' => $model->payment ? ' ' . $model->payment : '',
'credit' => $model->payment_amount ? Utils::formatMoney($model->credit, $model->currency_id, $model->country_id) : '', 'credit' => $model->payment_amount ? Utils::formatMoney($model->credit, $model->currency_id, $model->country_id) : '',
'payment_amount' => $model->payment_amount ? Utils::formatMoney($model->payment_amount, $model->currency_id, $model->country_id) : null, 'payment_amount' => $model->payment_amount ? Utils::formatMoney($model->payment_amount, $model->currency_id, $model->country_id) : null,
'adjustment' => $model->adjustment ? Utils::formatMoney($model->adjustment, $model->currency_id, $model->country_id) : null, 'adjustment' => $model->adjustment ? Utils::formatMoney($model->adjustment, $model->currency_id, $model->country_id) : null,
@ -351,7 +352,7 @@ class PublicClientController extends BaseController
} }
$color = $account->primary_color ? $account->primary_color : '#0b4d78'; $color = $account->primary_color ? $account->primary_color : '#0b4d78';
$data = [ $data = [
'color' => $color, 'color' => $color,
'account' => $account, 'account' => $account,
@ -422,7 +423,7 @@ class PublicClientController extends BaseController
return $this->returnError(); return $this->returnError();
} }
$color = $account->primary_color ? $account->primary_color : '#0b4d78'; $color = $account->primary_color ? $account->primary_color : '#0b4d78';
$data = [ $data = [
'color' => $color, 'color' => $color,
'account' => $account, 'account' => $account,
@ -471,7 +472,7 @@ class PublicClientController extends BaseController
->orderColumns( 'invoice_number', 'transaction_reference', 'payment_type', 'amount', 'payment_date') ->orderColumns( 'invoice_number', 'transaction_reference', 'payment_type', 'amount', 'payment_date')
->make(); ->make();
} }
private function getPaymentStatusLabel($model) private function getPaymentStatusLabel($model)
{ {
$label = trans("texts.status_" . strtolower($model->payment_status_name)); $label = trans("texts.status_" . strtolower($model->payment_status_name));
@ -546,7 +547,7 @@ class PublicClientController extends BaseController
return $this->returnError(); return $this->returnError();
} }
$color = $account->primary_color ? $account->primary_color : '#0b4d78'; $color = $account->primary_color ? $account->primary_color : '#0b4d78';
$data = [ $data = [
'color' => $color, 'color' => $color,
'account' => $account, 'account' => $account,
@ -599,55 +600,55 @@ class PublicClientController extends BaseController
return $invitation; return $invitation;
} }
public function getDocumentVFSJS($publicId, $name){ public function getDocumentVFSJS($publicId, $name){
if (!$invitation = $this->getInvitation()) { if (!$invitation = $this->getInvitation()) {
return $this->returnError(); return $this->returnError();
} }
$clientId = $invitation->invoice->client_id; $clientId = $invitation->invoice->client_id;
$document = Document::scope($publicId, $invitation->account_id)->first(); $document = Document::scope($publicId, $invitation->account_id)->first();
if(!$document->isPDFEmbeddable()){ if(!$document->isPDFEmbeddable()){
return Response::view('error', array('error'=>'Image does not exist!'), 404); return Response::view('error', array('error'=>'Image does not exist!'), 404);
} }
$authorized = false; $authorized = false;
if($document->expense && $document->expense->client_id == $invitation->invoice->client_id){ if($document->expense && $document->expense->client_id == $invitation->invoice->client_id){
$authorized = true; $authorized = true;
} else if($document->invoice && $document->invoice->client_id == $invitation->invoice->client_id){ } else if($document->invoice && $document->invoice->client_id == $invitation->invoice->client_id){
$authorized = true; $authorized = true;
} }
if(!$authorized){ if(!$authorized){
return Response::view('error', array('error'=>'Not authorized'), 403); return Response::view('error', array('error'=>'Not authorized'), 403);
} }
if(substr($name, -3)=='.js'){ if(substr($name, -3)=='.js'){
$name = substr($name, 0, -3); $name = substr($name, 0, -3);
} }
$content = $document->preview?$document->getRawPreview():$document->getRaw(); $content = $document->preview?$document->getRawPreview():$document->getRaw();
$content = 'ninjaAddVFSDoc('.json_encode(intval($publicId).'/'.strval($name)).',"'.base64_encode($content).'")'; $content = 'ninjaAddVFSDoc('.json_encode(intval($publicId).'/'.strval($name)).',"'.base64_encode($content).'")';
$response = Response::make($content, 200); $response = Response::make($content, 200);
$response->header('content-type', 'text/javascript'); $response->header('content-type', 'text/javascript');
$response->header('cache-control', 'max-age=31536000'); $response->header('cache-control', 'max-age=31536000');
return $response; return $response;
} }
protected function canCreateZip(){ protected function canCreateZip(){
return function_exists('gmp_init'); return function_exists('gmp_init');
} }
protected function getInvoiceZipDocuments($invoice, &$size=0){ protected function getInvoiceZipDocuments($invoice, &$size=0){
$documents = $invoice->documents; $documents = $invoice->documents;
foreach($invoice->expenses as $expense){ foreach($invoice->expenses as $expense){
$documents = $documents->merge($expense->documents); $documents = $documents->merge($expense->documents);
} }
$documents = $documents->sortBy('size'); $documents = $documents->sortBy('size');
$size = 0; $size = 0;
@ -655,16 +656,16 @@ class PublicClientController extends BaseController
$toZip = array(); $toZip = array();
foreach($documents as $document){ foreach($documents as $document){
if($size + $document->size > $maxSize)break; if($size + $document->size > $maxSize)break;
if(!empty($toZip[$document->name])){ if(!empty($toZip[$document->name])){
// This name is taken // This name is taken
if($toZip[$document->name]->hash != $document->hash){ if($toZip[$document->name]->hash != $document->hash){
// 2 different files with the same name // 2 different files with the same name
$nameInfo = pathinfo($document->name); $nameInfo = pathinfo($document->name);
for($i = 1;; $i++){ for($i = 1;; $i++){
$name = $nameInfo['filename'].' ('.$i.').'.$nameInfo['extension']; $name = $nameInfo['filename'].' ('.$i.').'.$nameInfo['extension'];
if(empty($toZip[$name])){ if(empty($toZip[$name])){
$toZip[$name] = $document; $toZip[$name] = $document;
$size += $document->size; $size += $document->size;
@ -674,7 +675,7 @@ class PublicClientController extends BaseController
break; break;
} }
} }
} }
} }
else{ else{
@ -682,25 +683,25 @@ class PublicClientController extends BaseController
$size += $document->size; $size += $document->size;
} }
} }
return $toZip; return $toZip;
} }
public function getInvoiceDocumentsZip($invitationKey){ public function getInvoiceDocumentsZip($invitationKey){
if (!$invitation = $this->invoiceRepo->findInvoiceByInvitation($invitationKey)) { if (!$invitation = $this->invoiceRepo->findInvoiceByInvitation($invitationKey)) {
return $this->returnError(); return $this->returnError();
} }
Session::put('invitation_key', $invitationKey); // track current invitation Session::put('invitation_key', $invitationKey); // track current invitation
$invoice = $invitation->invoice; $invoice = $invitation->invoice;
$toZip = $this->getInvoiceZipDocuments($invoice); $toZip = $this->getInvoiceZipDocuments($invoice);
if(!count($toZip)){ if(!count($toZip)){
return Response::view('error', array('error'=>'No documents small enough'), 404); return Response::view('error', array('error'=>'No documents small enough'), 404);
} }
$zip = new ZipArchive($invitation->account->name.' Invoice '.$invoice->invoice_number.'.zip'); $zip = new ZipArchive($invitation->account->name.' Invoice '.$invoice->invoice_number.'.zip');
return Response::stream(function() use ($toZip, $zip) { return Response::stream(function() use ($toZip, $zip) {
foreach($toZip as $name=>$document){ foreach($toZip as $name=>$document){
@ -718,28 +719,28 @@ class PublicClientController extends BaseController
$zip->finish(); $zip->finish();
}, 200); }, 200);
} }
public function getDocument($invitationKey, $publicId){ public function getDocument($invitationKey, $publicId){
if (!$invitation = $this->invoiceRepo->findInvoiceByInvitation($invitationKey)) { if (!$invitation = $this->invoiceRepo->findInvoiceByInvitation($invitationKey)) {
return $this->returnError(); return $this->returnError();
} }
Session::put('invitation_key', $invitationKey); // track current invitation Session::put('invitation_key', $invitationKey); // track current invitation
$clientId = $invitation->invoice->client_id; $clientId = $invitation->invoice->client_id;
$document = Document::scope($publicId, $invitation->account_id)->firstOrFail(); $document = Document::scope($publicId, $invitation->account_id)->firstOrFail();
$authorized = false; $authorized = false;
if($document->expense && $document->expense->client_id == $invitation->invoice->client_id){ if($document->expense && $document->expense->client_id == $invitation->invoice->client_id){
$authorized = true; $authorized = true;
} else if($document->invoice && $document->invoice->client_id == $invitation->invoice->client_id){ } else if($document->invoice && $document->invoice->client_id == $invitation->invoice->client_id){
$authorized = true; $authorized = true;
} }
if(!$authorized){ if(!$authorized){
return Response::view('error', array('error'=>'Not authorized'), 403); return Response::view('error', array('error'=>'Not authorized'), 403);
} }
return DocumentController::getDownloadResponse($document); return DocumentController::getDownloadResponse($document);
} }

View File

@ -110,7 +110,7 @@ class UserController extends BaseController
if (Utils::isNinja()) { if (Utils::isNinja()) {
$count = User::where('account_id', '=', Auth::user()->account_id)->count(); $count = User::where('account_id', '=', Auth::user()->account_id)->count();
if ($count >= MAX_NUM_USERS) { if ($count >= MAX_NUM_USERS) {
Session::flash('error', trans('texts.limit_users')); Session::flash('error', trans('texts.limit_users', ['limit' => MAX_NUM_USERS]));
return Redirect::to('settings/' . ACCOUNT_USER_MANAGEMENT); return Redirect::to('settings/' . ACCOUNT_USER_MANAGEMENT);
} }
} }
@ -291,7 +291,7 @@ class UserController extends BaseController
$account = Auth::user()->account; $account = Auth::user()->account;
$this->accountRepo->unlinkAccount($account); $this->accountRepo->unlinkAccount($account);
if ($account->company->accounts->count() == 1) { if ($account->company->accounts->count() == 1) {
$account->company->forceDelete(); $account->company->forceDelete();
} }
$account->forceDelete(); $account->forceDelete();
} }

View File

@ -17,6 +17,7 @@ class Kernel extends HttpKernel {
'Illuminate\View\Middleware\ShareErrorsFromSession', 'Illuminate\View\Middleware\ShareErrorsFromSession',
'App\Http\Middleware\VerifyCsrfToken', 'App\Http\Middleware\VerifyCsrfToken',
'App\Http\Middleware\DuplicateSubmissionCheck', 'App\Http\Middleware\DuplicateSubmissionCheck',
'App\Http\Middleware\QueryLogging',
'App\Http\Middleware\StartupCheck', 'App\Http\Middleware\StartupCheck',
]; ];

View File

@ -0,0 +1,38 @@
<?php namespace App\Http\Middleware;
use DB;
use Log;
use Utils;
use Closure;
class QueryLogging
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
// Enable query logging for development
if (Utils::isNinjaDev()) {
DB::enableQueryLog();
}
$response = $next($request);
if (Utils::isNinjaDev()) {
// hide requests made by debugbar
if (strstr($request->url(), '_debugbar') === false) {
$queries = DB::getQueryLog();
$count = count($queries);
Log::info($request->method() . ' - ' . $request->url() . ": $count queries");
//Log::info(json_encode($queries));
}
}
return $response;
}
}

View File

@ -124,9 +124,9 @@ class StartupCheck
$licenseKey = Input::get('license_key'); $licenseKey = Input::get('license_key');
$productId = Input::get('product_id'); $productId = Input::get('product_id');
$url = (Utils::isNinjaDev() ? SITE_URL : NINJA_APP_URL) . "/claim_license?license_key={$licenseKey}&product_id={$productId}&get_date=true"; $url = (Utils::isNinjaDev() ? SITE_URL : NINJA_APP_URL) . "/claim_license?license_key={$licenseKey}&product_id={$productId}&get_date=true";
$data = trim(file_get_contents($url)); $data = trim(file_get_contents($url));
if ($productId == PRODUCT_INVOICE_DESIGNS) { if ($productId == PRODUCT_INVOICE_DESIGNS) {
if ($data = json_decode($data)) { if ($data = json_decode($data)) {
foreach ($data as $item) { foreach ($data as $item) {
@ -181,10 +181,10 @@ class StartupCheck
} }
} }
} }
// Show message to IE 8 and before users // Show message to IE 8 and before users
if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match('/(?i)msie [2-8]/', $_SERVER['HTTP_USER_AGENT'])) { if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match('/(?i)msie [2-8]/', $_SERVER['HTTP_USER_AGENT'])) {
Session::flash('error', trans('texts.old_browser')); Session::flash('error', trans('texts.old_browser', ['link' => OUTDATE_BROWSER_URL]));
} }
$response = $next($request); $response = $next($request);

View File

@ -60,7 +60,7 @@ Route::group(['middleware' => 'auth:client'], function() {
Route::get('client/documents/js/{documents}/{filename}', 'PublicClientController@getDocumentVFSJS'); Route::get('client/documents/js/{documents}/{filename}', 'PublicClientController@getDocumentVFSJS');
Route::get('client/documents/{invitation_key}/{documents}/{filename?}', 'PublicClientController@getDocument'); Route::get('client/documents/{invitation_key}/{documents}/{filename?}', 'PublicClientController@getDocument');
Route::get('client/documents/{invitation_key}/{filename?}', 'PublicClientController@getInvoiceDocumentsZip'); Route::get('client/documents/{invitation_key}/{filename?}', 'PublicClientController@getInvoiceDocumentsZip');
Route::get('api/client.quotes', array('as'=>'api.client.quotes', 'uses'=>'PublicClientController@quoteDatatable')); Route::get('api/client.quotes', array('as'=>'api.client.quotes', 'uses'=>'PublicClientController@quoteDatatable'));
Route::get('api/client.invoices', array('as'=>'api.client.invoices', 'uses'=>'PublicClientController@invoiceDatatable')); Route::get('api/client.invoices', array('as'=>'api.client.invoices', 'uses'=>'PublicClientController@invoiceDatatable'));
Route::get('api/client.recurring_invoices', array('as'=>'api.client.recurring_invoices', 'uses'=>'PublicClientController@recurringInvoiceDatatable')); Route::get('api/client.recurring_invoices', array('as'=>'api.client.recurring_invoices', 'uses'=>'PublicClientController@recurringInvoiceDatatable'));
@ -735,20 +735,20 @@ if (!defined('CONTACT_EMAIL')) {
define('FEATURE_API', 'api'); define('FEATURE_API', 'api');
define('FEATURE_CLIENT_PORTAL_PASSWORD', 'client_portal_password'); define('FEATURE_CLIENT_PORTAL_PASSWORD', 'client_portal_password');
define('FEATURE_CUSTOM_URL', 'custom_url'); define('FEATURE_CUSTOM_URL', 'custom_url');
define('FEATURE_MORE_CLIENTS', 'more_clients'); // No trial allowed define('FEATURE_MORE_CLIENTS', 'more_clients'); // No trial allowed
// Whitelabel // Whitelabel
define('FEATURE_CLIENT_PORTAL_CSS', 'client_portal_css'); define('FEATURE_CLIENT_PORTAL_CSS', 'client_portal_css');
define('FEATURE_WHITE_LABEL', 'feature_white_label'); define('FEATURE_WHITE_LABEL', 'feature_white_label');
// Enterprise // Enterprise
define('FEATURE_DOCUMENTS', 'documents'); define('FEATURE_DOCUMENTS', 'documents');
// No Trial allowed // No Trial allowed
define('FEATURE_USERS', 'users');// Grandfathered for old Pro users define('FEATURE_USERS', 'users');// Grandfathered for old Pro users
define('FEATURE_USER_PERMISSIONS', 'user_permissions'); define('FEATURE_USER_PERMISSIONS', 'user_permissions');
// Pro users who started paying on or before this date will be able to manage users // Pro users who started paying on or before this date will be able to manage users
define('PRO_USERS_GRANDFATHER_DEADLINE', '2016-05-15'); define('PRO_USERS_GRANDFATHER_DEADLINE', '2016-05-15');
@ -765,7 +765,7 @@ if (!defined('CONTACT_EMAIL')) {
define('WEPAY_FEE_PAYER', env('WEPAY_FEE_PAYER', 'payee')); define('WEPAY_FEE_PAYER', env('WEPAY_FEE_PAYER', 'payee'));
define('WEPAY_APP_FEE_MULTIPLIER', env('WEPAY_APP_FEE_MULTIPLIER', 0.002)); define('WEPAY_APP_FEE_MULTIPLIER', env('WEPAY_APP_FEE_MULTIPLIER', 0.002));
define('WEPAY_APP_FEE_FIXED', env('WEPAY_APP_FEE_MULTIPLIER', 0.00)); define('WEPAY_APP_FEE_FIXED', env('WEPAY_APP_FEE_MULTIPLIER', 0.00));
$creditCards = [ $creditCards = [
1 => ['card' => 'images/credit_cards/Test-Visa-Icon.png', 'text' => 'Visa'], 1 => ['card' => 'images/credit_cards/Test-Visa-Icon.png', 'text' => 'Visa'],
2 => ['card' => 'images/credit_cards/Test-MasterCard-Icon.png', 'text' => 'Master Card'], 2 => ['card' => 'images/credit_cards/Test-MasterCard-Icon.png', 'text' => 'Master Card'],

View File

@ -27,15 +27,15 @@ class OFX
curl_setopt($c, CURLOPT_HTTPHEADER, array('Content-Type: application/x-ofx', 'User-Agent: httpclient')); curl_setopt($c, CURLOPT_HTTPHEADER, array('Content-Type: application/x-ofx', 'User-Agent: httpclient'));
curl_setopt($c, CURLOPT_POSTFIELDS, $this->request); curl_setopt($c, CURLOPT_POSTFIELDS, $this->request);
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
$this->response = curl_exec($c); $this->response = curl_exec($c);
if (Utils::isNinjaDev()) { if (Utils::isNinjaDev()) {
Log::info(print_r($this->response, true)); Log::info(print_r($this->response, true));
} }
curl_close($c); curl_close($c);
$tmp = explode('<OFX>', $this->response); $tmp = explode('<OFX>', $this->response);
$this->responseHeader = $tmp[0]; $this->responseHeader = $tmp[0];
$this->responseBody = '<OFX>'.$tmp[1]; $this->responseBody = '<OFX>'.$tmp[1];
@ -48,6 +48,7 @@ class OFX
return $x; return $x;
} }
public static function closeTags($x) public static function closeTags($x)
{ {
$x = preg_replace('/\s+/', '', $x); $x = preg_replace('/\s+/', '', $x);
@ -233,4 +234,3 @@ class Account
} }
} }
} }

View File

@ -153,11 +153,11 @@ class Utils
{ {
return App::getLocale() == 'en'; return App::getLocale() == 'en';
} }
public static function getLocaleRegion() public static function getLocaleRegion()
{ {
$parts = explode('_', App::getLocale()); $parts = explode('_', App::getLocale());
return count($parts) ? $parts[0] : 'en'; return count($parts) ? $parts[0] : 'en';
} }
@ -285,7 +285,7 @@ class Utils
if ($info) { if ($info) {
Log::info($error."\n", $data); Log::info($error."\n", $data);
} else { } else {
Log::error($error."\n", $data); Log::error($error."\n", $data);
} }
/* /*
@ -312,12 +312,12 @@ class Utils
public static function getFromCache($id, $type) { public static function getFromCache($id, $type) {
$cache = Cache::get($type); $cache = Cache::get($type);
if ( ! $cache) { if ( ! $cache) {
static::logError("Cache for {$type} is not set"); static::logError("Cache for {$type} is not set");
return null; return null;
} }
$data = $cache->filter(function($item) use ($id) { $data = $cache->filter(function($item) use ($id) {
return $item->id == $id; return $item->id == $id;
}); });
@ -344,7 +344,7 @@ class Utils
$decimal = $currency->decimal_separator; $decimal = $currency->decimal_separator;
$precision = $currency->precision; $precision = $currency->precision;
$code = $currency->code; $code = $currency->code;
$swapSymbol = false; $swapSymbol = $currency->swap_currency_symbol;
if ($countryId && $currencyId == CURRENCY_EURO) { if ($countryId && $currencyId == CURRENCY_EURO) {
$country = self::getFromCache($countryId, 'countries'); $country = self::getFromCache($countryId, 'countries');
@ -427,7 +427,12 @@ class Utils
public static function toCamelCase($string) public static function toCamelCase($string)
{ {
return lcfirst(str_replace(' ', '', ucwords(str_replace('_', ' ', $string)))); return lcfirst(static::toClassCase($string));
}
public static function toClassCase($string)
{
return str_replace(' ', '', ucwords(str_replace('_', ' ', $string)));
} }
public static function timestampToDateTimeString($timestamp) public static function timestampToDateTimeString($timestamp)

View File

@ -90,15 +90,24 @@ class Expense extends EntityModel
{ {
return round($this->amount * $this->exchange_rate, 2); return round($this->amount * $this->exchange_rate, 2);
} }
public function toArray() public function toArray()
{ {
$array = parent::toArray(); $array = parent::toArray();
if(empty($this->visible) || in_array('converted_amount', $this->visible))$array['converted_amount'] = $this->convertedAmount(); if(empty($this->visible) || in_array('converted_amount', $this->visible))$array['converted_amount'] = $this->convertedAmount();
return $array; return $array;
} }
public function scopeBankId($query, $bankdId = null)
{
if ($bankdId) {
$query->whereBankId($bankId);
}
return $query;
}
} }
Expense::creating(function ($expense) { Expense::creating(function ($expense) {

View File

@ -39,7 +39,7 @@ class Invitation extends EntityModel
$url = SITE_URL; $url = SITE_URL;
$iframe_url = $this->account->iframe_url; $iframe_url = $this->account->iframe_url;
if ($this->account->hasFeature(FEATURE_CUSTOM_URL)) { if ($this->account->hasFeature(FEATURE_CUSTOM_URL)) {
if ($iframe_url && !$forceOnsite) { if ($iframe_url && !$forceOnsite) {
return "{$iframe_url}?{$this->invitation_key}"; return "{$iframe_url}?{$this->invitation_key}";
@ -47,7 +47,7 @@ class Invitation extends EntityModel
$url = Utils::replaceSubdomain($url, $this->account->subdomain); $url = Utils::replaceSubdomain($url, $this->account->subdomain);
} }
} }
return "{$url}/{$type}/{$this->invitation_key}"; return "{$url}/{$type}/{$this->invitation_key}";
} }
@ -64,7 +64,7 @@ class Invitation extends EntityModel
$date = Utils::dateToString($this->$field); $date = Utils::dateToString($this->$field);
$hasValue = true; $hasValue = true;
} }
$parts[] = trans('texts.invitation_status.' . $status) . ': ' . $date; $parts[] = trans('texts.invitation_status_' . $status) . ': ' . $date;
} }
return $hasValue ? implode($parts, '<br/>') : false; return $hasValue ? implode($parts, '<br/>') : false;

View File

@ -48,9 +48,9 @@ class ContactMailer extends Mailer
$response = null; $response = null;
if ($client->trashed()) { if ($client->trashed()) {
return trans('texts.email_errors.inactive_client'); return trans('texts.email_error_inactive_client');
} elseif ($invoice->trashed()) { } elseif ($invoice->trashed()) {
return trans('texts.email_errors.inactive_invoice'); return trans('texts.email_error_inactive_invoice');
} }
$account->loadLocalizationSettings($client); $account->loadLocalizationSettings($client);
@ -62,23 +62,23 @@ class ContactMailer extends Mailer
if ($account->attatchPDF() && !$pdfString) { if ($account->attatchPDF() && !$pdfString) {
$pdfString = $invoice->getPDFString(); $pdfString = $invoice->getPDFString();
} }
$documentStrings = array(); $documentStrings = array();
if ($account->document_email_attachment && $invoice->hasDocuments()) { if ($account->document_email_attachment && $invoice->hasDocuments()) {
$documents = $invoice->documents; $documents = $invoice->documents;
foreach($invoice->expenses as $expense){ foreach($invoice->expenses as $expense){
$documents = $documents->merge($expense->documents); $documents = $documents->merge($expense->documents);
} }
$documents = $documents->sortBy('size'); $documents = $documents->sortBy('size');
$size = 0; $size = 0;
$maxSize = MAX_EMAIL_DOCUMENTS_SIZE * 1000; $maxSize = MAX_EMAIL_DOCUMENTS_SIZE * 1000;
foreach($documents as $document){ foreach($documents as $document){
$size += $document->size; $size += $document->size;
if($size > $maxSize)break; if($size > $maxSize)break;
$documentStrings[] = array( $documentStrings[] = array(
'name' => $document->name, 'name' => $document->name,
'data' => $document->getRaw(), 'data' => $document->getRaw(),
@ -92,7 +92,7 @@ class ContactMailer extends Mailer
$sent = true; $sent = true;
} }
} }
$account->loadLocalizationSettings(); $account->loadLocalizationSettings();
if ($sent === true) { if ($sent === true) {
@ -110,7 +110,7 @@ class ContactMailer extends Mailer
{ {
$client = $invoice->client; $client = $invoice->client;
$account = $invoice->account; $account = $invoice->account;
if (Auth::check()) { if (Auth::check()) {
$user = Auth::user(); $user = Auth::user();
} else { } else {
@ -121,13 +121,13 @@ class ContactMailer extends Mailer
} }
if (!$user->email || !$user->registered) { if (!$user->email || !$user->registered) {
return trans('texts.email_errors.user_unregistered'); return trans('texts.email_error_user_unregistered');
} elseif (!$user->confirmed) { } elseif (!$user->confirmed) {
return trans('texts.email_errors.user_unconfirmed'); return trans('texts.email_error_user_unconfirmed');
} elseif (!$invitation->contact->email) { } elseif (!$invitation->contact->email) {
return trans('texts.email_errors.invalid_contact_email'); return trans('texts.email_error_invalid_contact_email');
} elseif ($invitation->contact->trashed()) { } elseif ($invitation->contact->trashed()) {
return trans('texts.email_errors.inactive_contact'); return trans('texts.email_error_inactive_contact');
} }
$variables = [ $variables = [
@ -136,7 +136,7 @@ class ContactMailer extends Mailer
'invitation' => $invitation, 'invitation' => $invitation,
'amount' => $invoice->getRequestedAmount() 'amount' => $invoice->getRequestedAmount()
]; ];
if (empty($invitation->contact->password) && $account->hasFeature(FEATURE_CLIENT_PORTAL_PASSWORD) && $account->enable_portal_password && $account->send_portal_password) { if (empty($invitation->contact->password) && $account->hasFeature(FEATURE_CLIENT_PORTAL_PASSWORD) && $account->enable_portal_password && $account->send_portal_password) {
// The contact needs a password // The contact needs a password
$variables['password'] = $password = $this->generatePassword(); $variables['password'] = $password = $this->generatePassword();
@ -164,7 +164,7 @@ class ContactMailer extends Mailer
$subject = $this->templateService->processVariables($subject, $variables); $subject = $this->templateService->processVariables($subject, $variables);
$fromEmail = $user->email; $fromEmail = $user->email;
$view = $account->getTemplateView(ENTITY_INVOICE); $view = $account->getTemplateView(ENTITY_INVOICE);
$response = $this->sendTo($invitation->contact->email, $fromEmail, $account->getDisplayName(), $subject, $view, $data); $response = $this->sendTo($invitation->contact->email, $fromEmail, $account->getDisplayName(), $subject, $view, $data);
if ($response === true) { if ($response === true) {
@ -173,7 +173,7 @@ class ContactMailer extends Mailer
return $response; return $response;
} }
} }
protected function generatePassword($length = 9) protected function generatePassword($length = 9)
{ {
$sets = array( $sets = array(
@ -192,7 +192,7 @@ class ContactMailer extends Mailer
for($i = 0; $i < $length - count($sets); $i++) for($i = 0; $i < $length - count($sets); $i++)
$password .= $all[array_rand($all)]; $password .= $all[array_rand($all)];
$password = str_shuffle($password); $password = str_shuffle($password);
return $password; return $password;
} }
@ -256,7 +256,7 @@ class ContactMailer extends Mailer
{ {
$view = 'license_confirmation'; $view = 'license_confirmation';
$subject = trans('texts.payment_subject'); $subject = trans('texts.payment_subject');
if ($productId == PRODUCT_ONE_CLICK_INSTALL) { if ($productId == PRODUCT_ONE_CLICK_INSTALL) {
$license = "Softaculous install license: $license"; $license = "Softaculous install license: $license";
} elseif ($productId == PRODUCT_INVOICE_DESIGNS) { } elseif ($productId == PRODUCT_INVOICE_DESIGNS) {
@ -264,13 +264,13 @@ class ContactMailer extends Mailer
} elseif ($productId == PRODUCT_WHITE_LABEL) { } elseif ($productId == PRODUCT_WHITE_LABEL) {
$license = "White label license: $license"; $license = "White label license: $license";
} }
$data = [ $data = [
'client' => $name, 'client' => $name,
'amount' => Utils::formatMoney($amount, DEFAULT_CURRENCY, DEFAULT_COUNTRY), 'amount' => Utils::formatMoney($amount, DEFAULT_CURRENCY, DEFAULT_COUNTRY),
'license' => $license 'license' => $license
]; ];
$this->sendTo($email, CONTACT_EMAIL, CONTACT_NAME, $subject, $view, $data); $this->sendTo($email, CONTACT_EMAIL, CONTACT_NAME, $subject, $view, $data);
} }
} }

View File

@ -28,7 +28,7 @@ class AccountRepository
{ {
$company = new Company(); $company = new Company();
$company->save(); $company->save();
$account = new Account(); $account = new Account();
$account->ip = Request::getClientIp(); $account->ip = Request::getClientIp();
$account->account_key = str_random(RANDOM_KEY_LENGTH); $account->account_key = str_random(RANDOM_KEY_LENGTH);
@ -87,7 +87,7 @@ class AccountRepository
private function getAccountSearchData($user) private function getAccountSearchData($user)
{ {
$account = $user->account; $account = $user->account;
$data = [ $data = [
'clients' => [], 'clients' => [],
'contacts' => [], 'contacts' => [],
@ -102,7 +102,7 @@ class AccountRepository
if ($account->custom_client_label2) { if ($account->custom_client_label2) {
$data[$account->custom_client_label2] = []; $data[$account->custom_client_label2] = [];
} }
if ($user->hasPermission('view_all')) { if ($user->hasPermission('view_all')) {
$clients = Client::scope() $clients = Client::scope()
->with('contacts', 'invoices') ->with('contacts', 'invoices')
@ -114,7 +114,7 @@ class AccountRepository
$query->where('user_id', '=', $user->id); $query->where('user_id', '=', $user->id);
}])->get(); }])->get();
} }
foreach ($clients as $client) { foreach ($clients as $client) {
if ($client->name) { if ($client->name) {
$data['clients'][] = [ $data['clients'][] = [
@ -122,20 +122,20 @@ class AccountRepository
'tokens' => $client->name, 'tokens' => $client->name,
'url' => $client->present()->url, 'url' => $client->present()->url,
]; ];
} }
if ($client->custom_value1) { if ($client->custom_value1) {
$data[$account->custom_client_label1][] = [ $data[$account->custom_client_label1][] = [
'value' => "{$client->custom_value1}: " . $client->getDisplayName(), 'value' => "{$client->custom_value1}: " . $client->getDisplayName(),
'tokens' => $client->custom_value1, 'tokens' => $client->custom_value1,
'url' => $client->present()->url, 'url' => $client->present()->url,
]; ];
} }
if ($client->custom_value2) { if ($client->custom_value2) {
$data[$account->custom_client_label2][] = [ $data[$account->custom_client_label2][] = [
'value' => "{$client->custom_value2}: " . $client->getDisplayName(), 'value' => "{$client->custom_value2}: " . $client->getDisplayName(),
'tokens' => $client->custom_value2, 'tokens' => $client->custom_value2,
'url' => $client->present()->url, 'url' => $client->present()->url,
]; ];
} }
@ -242,9 +242,9 @@ class AccountRepository
if ($credit < 0) { if ($credit < 0) {
$credit = 0; $credit = 0;
} }
$plan_cost = Account::$plan_prices[$plan][$term]; $plan_cost = Account::$plan_prices[$plan][$term];
$account = $this->getNinjaAccount(); $account = $this->getNinjaAccount();
$lastInvoice = Invoice::withTrashed()->whereAccountId($account->id)->orderBy('public_id', 'DESC')->first(); $lastInvoice = Invoice::withTrashed()->whereAccountId($account->id)->orderBy('public_id', 'DESC')->first();
$publicId = $lastInvoice ? ($lastInvoice->public_id + 1) : 1; $publicId = $lastInvoice ? ($lastInvoice->public_id + 1) : 1;
@ -266,28 +266,28 @@ class AccountRepository
$credit_item->product_key = trans('texts.plan_credit_product'); $credit_item->product_key = trans('texts.plan_credit_product');
$invoice->invoice_items()->save($credit_item); $invoice->invoice_items()->save($credit_item);
} }
$item = InvoiceItem::createNew($invoice); $item = InvoiceItem::createNew($invoice);
$item->qty = 1; $item->qty = 1;
$item->cost = $plan_cost; $item->cost = $plan_cost;
$item->notes = trans("texts.{$plan}_plan_{$term}_description"); $item->notes = trans("texts.{$plan}_plan_{$term}_description");
// Don't change this without updating the regex in PaymentService->createPayment() // Don't change this without updating the regex in PaymentService->createPayment()
$item->product_key = 'Plan - '.ucfirst($plan).' ('.ucfirst($term).')'; $item->product_key = 'Plan - '.ucfirst($plan).' ('.ucfirst($term).')';
$invoice->invoice_items()->save($item); $invoice->invoice_items()->save($item);
if ($pending_monthly) { if ($pending_monthly) {
$term_end = $term == PLAN_MONTHLY ? date_create('+1 month') : date_create('+1 year'); $term_end = $term == PLAN_MONTHLY ? date_create('+1 month') : date_create('+1 year');
$pending_monthly_item = InvoiceItem::createNew($invoice); $pending_monthly_item = InvoiceItem::createNew($invoice);
$item->qty = 1; $item->qty = 1;
$pending_monthly_item->cost = 0; $pending_monthly_item->cost = 0;
$pending_monthly_item->notes = trans("texts.plan_pending_monthly", array('date', Utils::dateToString($term_end))); $pending_monthly_item->notes = trans("texts.plan_pending_monthly", array('date', Utils::dateToString($term_end)));
// Don't change this without updating the text in PaymentService->createPayment() // Don't change this without updating the text in PaymentService->createPayment()
$pending_monthly_item->product_key = 'Pending Monthly'; $pending_monthly_item->product_key = 'Pending Monthly';
$invoice->invoice_items()->save($pending_monthly_item); $invoice->invoice_items()->save($pending_monthly_item);
} }
$invitation = new Invitation(); $invitation = new Invitation();
$invitation->account_id = $account->id; $invitation->account_id = $account->id;
@ -328,12 +328,14 @@ class AccountRepository
$user->notify_paid = true; $user->notify_paid = true;
$account->users()->save($user); $account->users()->save($user);
$accountGateway = new AccountGateway(); if ($config = env(NINJA_GATEWAY_CONFIG)) {
$accountGateway->user_id = $user->id; $accountGateway = new AccountGateway();
$accountGateway->gateway_id = NINJA_GATEWAY_ID; $accountGateway->user_id = $user->id;
$accountGateway->public_id = 1; $accountGateway->gateway_id = NINJA_GATEWAY_ID;
$accountGateway->setConfig(json_decode(env(NINJA_GATEWAY_CONFIG))); $accountGateway->public_id = 1;
$account->account_gateways()->save($accountGateway); $accountGateway->setConfig(json_decode($config));
$account->account_gateways()->save($accountGateway);
}
} }
return $account; return $account;
@ -356,11 +358,11 @@ class AccountRepository
$client->user_id = $ninjaUser->id; $client->user_id = $ninjaUser->id;
$client->currency_id = 1; $client->currency_id = 1;
} }
foreach (['name', 'address1', 'address2', 'city', 'state', 'postal_code', 'country_id', 'work_phone', 'language_id', 'vat_number'] as $field) { foreach (['name', 'address1', 'address2', 'city', 'state', 'postal_code', 'country_id', 'work_phone', 'language_id', 'vat_number'] as $field) {
$client->$field = $account->$field; $client->$field = $account->$field;
} }
$client->save(); $client->save();
if ($clientExists) { if ($clientExists) {
@ -372,7 +374,7 @@ class AccountRepository
$contact->public_id = $account->id; $contact->public_id = $account->id;
$contact->is_primary = true; $contact->is_primary = true;
} }
$user = $account->getPrimaryUser(); $user = $account->getPrimaryUser();
foreach (['first_name', 'last_name', 'email', 'phone'] as $field) { foreach (['first_name', 'last_name', 'email', 'phone'] as $field) {
$contact->$field = $user->$field; $contact->$field = $user->$field;
@ -513,7 +515,7 @@ class AccountRepository
if ($with) { if ($with) {
$users->with($with); $users->with($with);
} }
return $users->get(); return $users->get();
} }
@ -565,7 +567,7 @@ class AccountRepository
$record->save(); $record->save();
$users = $this->getUserAccounts($record); $users = $this->getUserAccounts($record);
// Pick the primary user // Pick the primary user
foreach ($users as $user) { foreach ($users as $user) {
if (!$user->public_id) { if (!$user->public_id) {
@ -573,16 +575,16 @@ class AccountRepository
if(empty($primaryUser)) { if(empty($primaryUser)) {
$useAsPrimary = true; $useAsPrimary = true;
} }
$planDetails = $user->account->getPlanDetails(false, false); $planDetails = $user->account->getPlanDetails(false, false);
$planLevel = 0; $planLevel = 0;
if ($planDetails) { if ($planDetails) {
$planLevel = 1; $planLevel = 1;
if ($planDetails['plan'] == PLAN_ENTERPRISE) { if ($planDetails['plan'] == PLAN_ENTERPRISE) {
$planLevel = 2; $planLevel = 2;
} }
if (!$useAsPrimary && ( if (!$useAsPrimary && (
$planLevel > $primaryUserPlanLevel $planLevel > $primaryUserPlanLevel
|| ($planLevel == $primaryUserPlanLevel && $planDetails['expires'] > $primaryUserPlanExpires) || ($planLevel == $primaryUserPlanLevel && $planDetails['expires'] > $primaryUserPlanExpires)
@ -590,7 +592,7 @@ class AccountRepository
$useAsPrimary = true; $useAsPrimary = true;
} }
} }
if ($useAsPrimary) { if ($useAsPrimary) {
$primaryUser = $user; $primaryUser = $user;
$primaryUserPlanLevel = $planLevel; $primaryUserPlanLevel = $planLevel;
@ -600,14 +602,14 @@ class AccountRepository
} }
} }
} }
// Merge other companies into the primary user's company // Merge other companies into the primary user's company
if (!empty($primaryUser)) { if (!empty($primaryUser)) {
foreach ($users as $user) { foreach ($users as $user) {
if ($user == $primaryUser || $user->public_id) { if ($user == $primaryUser || $user->public_id) {
continue; continue;
} }
if ($user->account->company_id != $primaryUser->account->company_id) { if ($user->account->company_id != $primaryUser->account->company_id) {
foreach ($user->account->company->accounts as $account) { foreach ($user->account->company->accounts as $account) {
$account->company_id = $primaryUser->account->company_id; $account->company_id = $primaryUser->account->company_id;
@ -636,9 +638,9 @@ class AccountRepository
$userAccount->removeUserId($userId); $userAccount->removeUserId($userId);
$userAccount->save(); $userAccount->save();
} }
$user = User::whereId($userId)->first(); $user = User::whereId($userId)->first();
if (!$user->public_id && $user->account->company->accounts->count() > 1) { if (!$user->public_id && $user->account->company->accounts->count() > 1) {
$company = Company::create(); $company = Company::create();
$company->save(); $company->save();
@ -660,7 +662,7 @@ class AccountRepository
->withTrashed() ->withTrashed()
->first(); ->first();
} while ($match); } while ($match);
return $code; return $code;
} }
@ -668,7 +670,7 @@ class AccountRepository
{ {
$name = trim($name) ?: 'TOKEN'; $name = trim($name) ?: 'TOKEN';
$users = $this->findUsers($user); $users = $this->findUsers($user);
foreach ($users as $user) { foreach ($users as $user) {
if ($token = AccountToken::whereUserId($user->id)->whereName($name)->first()) { if ($token = AccountToken::whereUserId($user->id)->whereName($name)->first()) {
continue; continue;

View File

@ -34,14 +34,10 @@ class BankAccountService extends BaseService
return $this->bankAccountRepo; return $this->bankAccountRepo;
} }
public function loadBankAccounts($bankId, $username, $password, $includeTransactions = true) private function getExpenses($bankId = null)
{ {
if (! $bankId || ! $username || ! $password) {
return false;
}
$expenses = Expense::scope() $expenses = Expense::scope()
->whereBankId($bankId) ->bankId($bankId)
->where('transaction_id', '!=', '') ->where('transaction_id', '!=', '')
->withTrashed() ->withTrashed()
->get(['transaction_id']) ->get(['transaction_id'])
@ -50,6 +46,16 @@ class BankAccountService extends BaseService
return $val['transaction_id']; return $val['transaction_id'];
}, $expenses)); }, $expenses));
return $expenses;
}
public function loadBankAccounts($bankId, $username, $password, $includeTransactions = true)
{
if (! $bankId || ! $username || ! $password) {
return false;
}
$expenses = $this->getExpenses();
$vendorMap = $this->createVendorMap(); $vendorMap = $this->createVendorMap();
$bankAccounts = BankSubaccount::scope() $bankAccounts = BankSubaccount::scope()
->whereHas('bank_account', function ($query) use ($bankId) { ->whereHas('bank_account', function ($query) use ($bankId) {
@ -106,44 +112,60 @@ class BankAccountService extends BaseService
$obj->balance = Utils::formatMoney($account->ledgerBalance, CURRENCY_DOLLAR); $obj->balance = Utils::formatMoney($account->ledgerBalance, CURRENCY_DOLLAR);
if ($includeTransactions) { if ($includeTransactions) {
$ofxParser = new \OfxParser\Parser(); $obj = $this->parseTransactions($obj, $account->response, $expenses, $vendorMap);
$ofx = $ofxParser->loadFromString($account->response);
$obj->start_date = $ofx->BankAccount->Statement->startDate;
$obj->end_date = $ofx->BankAccount->Statement->endDate;
$obj->transactions = [];
foreach ($ofx->BankAccount->Statement->transactions as $transaction) {
// ensure transactions aren't imported as expenses twice
if (isset($expenses[$transaction->uniqueId])) {
continue;
}
if ($transaction->amount >= 0) {
continue;
}
// if vendor has already been imported use current name
$vendorName = trim(substr($transaction->name, 0, 20));
$key = strtolower($vendorName);
$vendor = isset($vendorMap[$key]) ? $vendorMap[$key] : null;
$transaction->vendor = $vendor ? $vendor->name : $this->prepareValue($vendorName);
$transaction->info = $this->prepareValue(substr($transaction->name, 20));
$transaction->memo = $this->prepareValue($transaction->memo);
$transaction->date = \Auth::user()->account->formatDate($transaction->date);
$transaction->amount *= -1;
$obj->transactions[] = $transaction;
}
} }
return $obj; return $obj;
} }
private function parseTransactions($account, $data, $expenses, $vendorMap)
{
$ofxParser = new \OfxParser\Parser();
$ofx = $ofxParser->loadFromString($data);
$account->start_date = $ofx->BankAccount->Statement->startDate;
$account->end_date = $ofx->BankAccount->Statement->endDate;
$account->transactions = [];
foreach ($ofx->BankAccount->Statement->transactions as $transaction) {
// ensure transactions aren't imported as expenses twice
if (isset($expenses[$transaction->uniqueId])) {
continue;
}
if ($transaction->amount >= 0) {
continue;
}
// if vendor has already been imported use current name
$vendorName = trim(substr($transaction->name, 0, 20));
$key = strtolower($vendorName);
$vendor = isset($vendorMap[$key]) ? $vendorMap[$key] : null;
$transaction->vendor = $vendor ? $vendor->name : $this->prepareValue($vendorName);
$transaction->info = $this->prepareValue(substr($transaction->name, 20));
$transaction->memo = $this->prepareValue($transaction->memo);
$transaction->date = \Auth::user()->account->formatDate($transaction->date);
$transaction->amount *= -1;
$account->transactions[] = $transaction;
}
return $account;
}
private function prepareValue($value) private function prepareValue($value)
{ {
return ucwords(strtolower(trim($value))); return ucwords(strtolower(trim($value)));
} }
public function parseOFX($data)
{
$account = new stdClass;
$expenses = $this->getExpenses();
$vendorMap = $this->createVendorMap();
return $this->parseTransactions($account, $data, $expenses, $vendorMap);
}
private function createVendorMap() private function createVendorMap()
{ {
$vendorMap = []; $vendorMap = [];
@ -158,7 +180,7 @@ class BankAccountService extends BaseService
return $vendorMap; return $vendorMap;
} }
public function importExpenses($bankId, $input) public function importExpenses($bankId = 0, $input)
{ {
$vendorMap = $this->createVendorMap(); $vendorMap = $this->createVendorMap();
$countVendors = 0; $countVendors = 0;
@ -178,7 +200,7 @@ class BankAccountService extends BaseService
$field => $info, $field => $info,
'name' => $vendorName, 'name' => $vendorName,
'transaction_name' => $transaction['vendor_orig'], 'transaction_name' => $transaction['vendor_orig'],
'vendorcontact' => [], 'vendor_contact' => [],
]); ]);
$vendorMap[$key] = $vendor; $vendorMap[$key] = $vendor;
$vendorMap[$transaction['vendor_orig']] = $vendor; $vendorMap[$transaction['vendor_orig']] = $vendor;

View File

@ -74,6 +74,8 @@
"barracudanetworks/archivestream-php": "^1.0", "barracudanetworks/archivestream-php": "^1.0",
"omnipay/braintree": "~2.0@dev", "omnipay/braintree": "~2.0@dev",
"gatepay/FedACHdir": "dev-master@dev", "gatepay/FedACHdir": "dev-master@dev",
"websight/l5-google-cloud-storage": "^1.0",
"fzaninotto/faker": "^1.5"
"wepay/php-sdk": "^0.2", "wepay/php-sdk": "^0.2",
"collizo4sky/omnipay-wepay": "dev-additional-calls" "collizo4sky/omnipay-wepay": "dev-additional-calls"
}, },
@ -82,7 +84,6 @@
"phpspec/phpspec": "~2.1", "phpspec/phpspec": "~2.1",
"codeception/codeception": "*", "codeception/codeception": "*",
"codeception/c3": "~2.0", "codeception/c3": "~2.0",
"fzaninotto/faker": "^1.5",
"symfony/dom-crawler": "~3.0" "symfony/dom-crawler": "~3.0"
}, },
"autoload": { "autoload": {

247
composer.lock generated
View File

@ -4,8 +4,8 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"hash": "b2471aea1af5ef67a1379ad95b5138f7", "hash": "392a09a61498eddc166665b7cdda1dde",
"content-hash": "df30a311df0341933d4ff2c3aa5974a6", "content-hash": "1f86d83e1ef0bce86debfb45120e6db8",
"packages": [ "packages": [
{ {
"name": "agmscode/omnipay-agms", "name": "agmscode/omnipay-agms",
@ -505,7 +505,7 @@
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/f7b31bdbdceaaea930c71df20e4180b0b7172b4a", "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/35ebf3a2ba9443e11fbdb9066cc363ec7b2245e4",
"reference": "e97ed532f09e290b91ff7713b785ed7ab11d0812", "reference": "e97ed532f09e290b91ff7713b785ed7ab11d0812",
"shasum": "" "shasum": ""
}, },
@ -746,7 +746,7 @@
"laravel" "laravel"
], ],
"abandoned": "OpenSkill/Datatable", "abandoned": "OpenSkill/Datatable",
"time": "2015-11-23 21:33:41" "time": "2015-04-29 07:00:36"
}, },
{ {
"name": "classpreloader/classpreloader", "name": "classpreloader/classpreloader",
@ -2011,6 +2011,54 @@
], ],
"time": "2015-01-16 08:41:13" "time": "2015-01-16 08:41:13"
}, },
{
"name": "fzaninotto/faker",
"version": "v1.6.0",
"source": {
"type": "git",
"url": "https://github.com/fzaninotto/Faker.git",
"reference": "44f9a286a04b80c76a4e5fb7aad8bb539b920123"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/fzaninotto/Faker/zipball/44f9a286a04b80c76a4e5fb7aad8bb539b920123",
"reference": "44f9a286a04b80c76a4e5fb7aad8bb539b920123",
"shasum": ""
},
"require": {
"php": "^5.3.3|^7.0"
},
"require-dev": {
"ext-intl": "*",
"phpunit/phpunit": "~4.0",
"squizlabs/php_codesniffer": "~1.5"
},
"type": "library",
"extra": {
"branch-alias": []
},
"autoload": {
"psr-4": {
"Faker\\": "src/Faker/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "François Zaninotto"
}
],
"description": "Faker is a PHP library that generates fake data for you.",
"keywords": [
"data",
"faker",
"fixtures"
],
"time": "2016-04-29 12:21:54"
},
{ {
"name": "gatepay/FedACHdir", "name": "gatepay/FedACHdir",
"version": "dev-master", "version": "dev-master",
@ -2020,7 +2068,50 @@
"reference": "origin/master" "reference": "origin/master"
}, },
"type": "library", "type": "library",
"time": "2016-04-29 12:01:22" "time": "2016-05-09 12:00:35"
},
{
"name": "google/apiclient",
"version": "1.1.7",
"source": {
"type": "git",
"url": "https://github.com/google/google-api-php-client.git",
"reference": "400f250a30ae1dd4c4a0a4f750fe973fc70e6311"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/google/google-api-php-client/zipball/400f250a30ae1dd4c4a0a4f750fe973fc70e6311",
"reference": "400f250a30ae1dd4c4a0a4f750fe973fc70e6311",
"shasum": ""
},
"require": {
"php": ">=5.2.1"
},
"require-dev": {
"phpunit/phpunit": "3.7.*",
"squizlabs/php_codesniffer": "~2.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.1.x-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"Apache-2.0"
],
"description": "Client library for Google APIs",
"homepage": "http://developers.google.com/api-client-library/php",
"keywords": [
"google"
],
"time": "2016-02-02 18:50:42"
}, },
{ {
"name": "guzzle/guzzle", "name": "guzzle/guzzle",
@ -4345,7 +4436,7 @@
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/thephpleague/omnipay-braintree/zipball/e4b4027c6a9e6443833490d0d51fd530f0a19f62", "url": "https://api.github.com/repos/thephpleague/omnipay-braintree/zipball/a0c8b2152a8a5b7e14572b71d860f2ec26f20a87",
"reference": "e4b4027c6a9e6443833490d0d51fd530f0a19f62", "reference": "e4b4027c6a9e6443833490d0d51fd530f0a19f62",
"shasum": "" "shasum": ""
}, },
@ -5790,7 +5881,7 @@
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/thephpleague/omnipay-stripe/zipball/0ea7a647ee01e29c152814e11c2ea6307e5b0db9", "url": "https://api.github.com/repos/thephpleague/omnipay-stripe/zipball/88badbda83f1c16e2d94c41a869be37d9d9fef5a",
"reference": "0ea7a647ee01e29c152814e11c2ea6307e5b0db9", "reference": "0ea7a647ee01e29c152814e11c2ea6307e5b0db9",
"shasum": "" "shasum": ""
}, },
@ -6610,6 +6701,53 @@
], ],
"time": "2015-08-12 08:09:37" "time": "2015-08-12 08:09:37"
}, },
{
"name": "superbalist/flysystem-google-storage",
"version": "1.0.3",
"source": {
"type": "git",
"url": "https://github.com/Superbalist/flysystem-google-storage.git",
"reference": "441a8529680986a2d2063a268ee2918f51db1b79"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Superbalist/flysystem-google-storage/zipball/441a8529680986a2d2063a268ee2918f51db1b79",
"reference": "441a8529680986a2d2063a268ee2918f51db1b79",
"shasum": ""
},
"require": {
"google/apiclient": "~1.1|^2.0.0@RC",
"league/flysystem": "~1.0",
"php": ">=5.4.0"
},
"require-dev": {
"mockery/mockery": "0.9.*",
"phpunit/phpunit": "~4.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0-dev"
}
},
"autoload": {
"psr-4": {
"Superbalist\\Flysystem\\GoogleStorage\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Superbalist.com a division of Takealot Online (Pty) Ltd",
"email": "info@superbalist.com"
}
],
"description": "Flysystem adapter for Google Cloud Storage",
"time": "2016-04-12 14:56:22"
},
{ {
"name": "swiftmailer/swiftmailer", "name": "swiftmailer/swiftmailer",
"version": "v5.4.1", "version": "v5.4.1",
@ -8057,6 +8195,49 @@
], ],
"time": "2016-02-25 10:29:59" "time": "2016-02-25 10:29:59"
}, },
{
"name": "websight/l5-google-cloud-storage",
"version": "1.0.3",
"source": {
"type": "git",
"url": "https://github.com/websightgmbh/l5-google-cloud-storage.git",
"reference": "c1cac9985dfce60010234c9dca127f3543d2d594"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/websightgmbh/l5-google-cloud-storage/zipball/c1cac9985dfce60010234c9dca127f3543d2d594",
"reference": "c1cac9985dfce60010234c9dca127f3543d2d594",
"shasum": ""
},
"require": {
"illuminate/support": "~5.0.17|5.1.*|5.2.*",
"superbalist/flysystem-google-storage": "^1.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Websight\\GcsProvider\\": "src/Websight/GcsProvider/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Cedric Ziel",
"email": "ziel@websight.de"
}
],
"description": "Laravel 5 Flysystem Google Cloud Storage Service Provider",
"homepage": "https://github.com/websightgmbh/l5-google-cloud-storage",
"keywords": [
"Flysystem",
"laravel",
"laravel5"
],
"time": "2016-03-04 11:57:00"
},
{ {
"name": "wepay/php-sdk", "name": "wepay/php-sdk",
"version": "0.2.7", "version": "0.2.7",
@ -8908,58 +9089,6 @@
], ],
"time": "2015-12-31 15:58:49" "time": "2015-12-31 15:58:49"
}, },
{
"name": "fzaninotto/faker",
"version": "v1.5.0",
"source": {
"type": "git",
"url": "https://github.com/fzaninotto/Faker.git",
"reference": "d0190b156bcca848d401fb80f31f504f37141c8d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/fzaninotto/Faker/zipball/d0190b156bcca848d401fb80f31f504f37141c8d",
"reference": "d0190b156bcca848d401fb80f31f504f37141c8d",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"require-dev": {
"phpunit/phpunit": "~4.0",
"squizlabs/php_codesniffer": "~1.5"
},
"suggest": {
"ext-intl": "*"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.5.x-dev"
}
},
"autoload": {
"psr-4": {
"Faker\\": "src/Faker/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "François Zaninotto"
}
],
"description": "Faker is a PHP library that generates fake data for you.",
"keywords": [
"data",
"faker",
"fixtures"
],
"time": "2015-05-29 06:29:14"
},
{ {
"name": "phpspec/php-diff", "name": "phpspec/php-diff",
"version": "v1.0.2", "version": "v1.0.2",

View File

@ -153,6 +153,7 @@ return [
'Laravel\Socialite\SocialiteServiceProvider', 'Laravel\Socialite\SocialiteServiceProvider',
'Jlapp\Swaggervel\SwaggervelServiceProvider', 'Jlapp\Swaggervel\SwaggervelServiceProvider',
'Maatwebsite\Excel\ExcelServiceProvider', 'Maatwebsite\Excel\ExcelServiceProvider',
Websight\GcsProvider\CloudStorageServiceProvider::class,
/* /*
* Application Service Providers... * Application Service Providers...
@ -211,6 +212,7 @@ return [
'Schema' => 'Illuminate\Support\Facades\Schema', 'Schema' => 'Illuminate\Support\Facades\Schema',
'Seeder' => 'Illuminate\Database\Seeder', 'Seeder' => 'Illuminate\Database\Seeder',
'Session' => 'Illuminate\Support\Facades\Session', 'Session' => 'Illuminate\Support\Facades\Session',
'Storage' => 'Illuminate\Support\Facades\Storage',
'Str' => 'Illuminate\Support\Str', 'Str' => 'Illuminate\Support\Str',
'URL' => 'Illuminate\Support\Facades\URL', 'URL' => 'Illuminate\Support\Facades\URL',
'Validator' => 'Illuminate\Support\Facades\Validator', 'Validator' => 'Illuminate\Support\Facades\Validator',

View File

@ -47,12 +47,12 @@ return [
'driver' => 'local', 'driver' => 'local',
'root' => storage_path().'/app', 'root' => storage_path().'/app',
], ],
'logos' => [ 'logos' => [
'driver' => 'local', 'driver' => 'local',
'root' => env('LOGO_PATH', public_path().'/logo'), 'root' => env('LOGO_PATH', public_path().'/logo'),
], ],
'documents' => [ 'documents' => [
'driver' => 'local', 'driver' => 'local',
'root' => storage_path().'/documents', 'root' => storage_path().'/documents',
@ -76,6 +76,13 @@ return [
'url_type' => env('RACKSPACE_URL_TYPE', 'publicURL') 'url_type' => env('RACKSPACE_URL_TYPE', 'publicURL')
], ],
'gcs' => [
'driver' => 'gcs',
'service_account' => env('GCS_USERNAME', ''),
'service_account_certificate' => storage_path() . '/credentials.p12',
'service_account_certificate_password' => env('GCS_PASSWORD', ''),
'bucket' => env('GCS_BUCKET', 'cloud-storage-bucket'),
],
], ],
]; ];

View File

@ -0,0 +1,53 @@
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddSwapCurrencySymbolToCurrency extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('currencies', function(Blueprint $table) {
$table->boolean('swap_currency_symbol')->default(false);
});
Schema::table('expenses', function(Blueprint $table) {
$table->string('tax_name1')->nullable();
$table->decimal('tax_rate1', 13, 3);
$table->string('tax_name2')->nullable();
$table->decimal('tax_rate2', 13, 3);
});
Schema::table('account_gateways', function(Blueprint $table) {
$table->boolean('require_cvv')->default(true)->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('currencies', function(Blueprint $table) {
$table->dropColumn('swap_currency_symbol');
});
Schema::table('expenses', function(Blueprint $table) {
$table->dropColumn('tax_name1');
$table->dropColumn('tax_rate1');
$table->dropColumn('tax_name2');
$table->dropColumn('tax_rate2');
});
Schema::table('account_gateways', function(Blueprint $table) {
$table->dropColumn('require_cvv');
});
}
}

View File

@ -58,7 +58,7 @@ class CurrenciesSeeder extends Seeder
['name' => 'Maldivian Rufiyaa', 'code' => 'MVR', 'symbol' => '', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'], ['name' => 'Maldivian Rufiyaa', 'code' => 'MVR', 'symbol' => '', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'],
['name' => 'Costa Rican Colón', 'code' => 'CRC', 'symbol' => '', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'], ['name' => 'Costa Rican Colón', 'code' => 'CRC', 'symbol' => '', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'],
['name' => 'Pakistani Rupee', 'code' => 'PKR', 'symbol' => 'Rs ', 'precision' => '0', 'thousand_separator' => ',', 'decimal_separator' => '.'], ['name' => 'Pakistani Rupee', 'code' => 'PKR', 'symbol' => 'Rs ', 'precision' => '0', 'thousand_separator' => ',', 'decimal_separator' => '.'],
['name' => 'Polish Zloty', 'code' => 'PLN', 'symbol' => 'zł', 'precision' => '2', 'thousand_separator' => ' ', 'decimal_separator' => ','], ['name' => 'Polish Zloty', 'code' => 'PLN', 'symbol' => 'zł', 'precision' => '2', 'thousand_separator' => ' ', 'decimal_separator' => ',', 'swap_currency_symbol' => true],
]; ];
foreach ($currencies as $currency) { foreach ($currencies as $currency) {

View File

@ -70,6 +70,7 @@ We're using the [Git-Flow](http://nvie.com/posts/a-successful-git-branching-mode
* [patricktalmadge/bootstrapper](https://github.com/patricktalmadge/bootstrapper) - Laravel Twitter Bootstrap Bundle * [patricktalmadge/bootstrapper](https://github.com/patricktalmadge/bootstrapper) - Laravel Twitter Bootstrap Bundle
* [danielfarrell/bootstrap-combobox](https://github.com/danielfarrell/bootstrap-combobox) - A combobox plugin * [danielfarrell/bootstrap-combobox](https://github.com/danielfarrell/bootstrap-combobox) - A combobox plugin
* [eternicode/bootstrap-datepicker](https://github.com/eternicode/bootstrap-datepicker) - A datepicker for @twitter bootstrap * [eternicode/bootstrap-datepicker](https://github.com/eternicode/bootstrap-datepicker) - A datepicker for @twitter bootstrap
* [xdan/datetimepicker](https://github.com/xdan/datetimepicker) - jQuery Plugin Date and Time Picker
* [twitter/typeahead.js](https://github.com/twitter/typeahead.js) - a fast and fully-featured autocomplete library * [twitter/typeahead.js](https://github.com/twitter/typeahead.js) - a fast and fully-featured autocomplete library
* [krisk/Fuse](https://github.com/krisk/Fuse) - Lightweight fuzzy-search, in JavaScript * [krisk/Fuse](https://github.com/krisk/Fuse) - Lightweight fuzzy-search, in JavaScript
* [knockout/knockout](https://github.com/knockout/knockout) - Knockout makes it easier to create rich, responsive UIs with JavaScript * [knockout/knockout](https://github.com/knockout/knockout) - Knockout makes it easier to create rich, responsive UIs with JavaScript

View File

@ -517,8 +517,8 @@ $LANG = array(
'duplicate_post' => 'Varování: předchozí stránka byla odeslána dvakrát. Druhé odeslání bylo ignorováno.', 'duplicate_post' => 'Varování: předchozí stránka byla odeslána dvakrát. Druhé odeslání bylo ignorováno.',
'view_documentation' => 'Zobrazit dokumentaci', 'view_documentation' => 'Zobrazit dokumentaci',
'app_title' => 'Open source online fakrurace', 'app_title' => 'Open source online fakrurace',
'app_description' => 'Invoice Ninja je bezplatné open-source řešení pro fakturaci a účtování zákazníkům. 'app_description' => 'Invoice Ninja je bezplatné open-source řešení pro fakturaci a účtování zákazníkům.
S Invoice Ninja, můžete jednoduše vytvářet a posílat hezké faktury z jakéhokoli zařízení, které přístup na web. Vaši klienti si mohou faktury S Invoice Ninja, můžete jednoduše vytvářet a posílat hezké faktury z jakéhokoli zařízení, které přístup na web. Vaši klienti si mohou faktury
vytisknout, stáhnout jako PDF nebo Vám rovnou online zaplatit.', vytisknout, stáhnout jako PDF nebo Vám rovnou online zaplatit.',
'rows' => 'řádky', 'rows' => 'řádky',
'www' => 'www', 'www' => 'www',
@ -913,7 +913,7 @@ $LANG = array(
'archive_payment_term' => 'Archivovat platební podmínky', 'archive_payment_term' => 'Archivovat platební podmínky',
'recurring_due_dates' => 'Datumy splatnosti pravidelných faktur', 'recurring_due_dates' => 'Datumy splatnosti pravidelných faktur',
'recurring_due_date_help' => '<p>Automaticky nastavit datum splatnosti na fakturách</p> 'recurring_due_date_help' => '<p>Automaticky nastavit datum splatnosti na fakturách</p>
<p>U faktury s měsíčním nebo ročním cyklem bude nastavena měsíční splatnost v dalším měsíci. Invoices on a monthly or yearly cycle set to be due on or before the day they are created will be due the next month. <p>U faktury s měsíčním nebo ročním cyklem bude nastavena měsíční splatnost v dalším měsíci. Invoices on a monthly or yearly cycle set to be due on or before the day they are created will be due the next month.
Faktury se splatností k 29. nebo 30 v měsících, které tyto dny nemají se splatnost nastaví k poslednímu dni v měsíci.</p> Faktury se splatností k 29. nebo 30 v měsících, které tyto dny nemají se splatnost nastaví k poslednímu dni v měsíci.</p>
<p>Faktury s týdenním cyklem mají jako výchozí týdenní splatnost.</p> <p>Faktury s týdenním cyklem mají jako výchozí týdenní splatnost.</p>
<p>Například:</p> <p>Například:</p>
@ -995,40 +995,26 @@ $LANG = array(
'overdue' => 'Po termínu', 'overdue' => 'Po termínu',
'white_label_text' => 'Objednejte si white label licenci na JEDEN ROK $'.WHITE_LABEL_PRICE.' pro odstranění značky Invoice Ninja z klientského portálu a stránek podpory.', 'white_label_text' => 'Objednejte si white label licenci na JEDEN ROK $:price pro odstranění značky Invoice Ninja z klientského portálu a stránek podpory.',
'user_email_footer' => 'Pro úpravu emailových notifikací prosím navštivte '.SITE_URL.'/settings/notifications', 'user_email_footer' => 'Pro úpravu emailových notifikací prosím navštivte :link',
'reset_password_footer' => 'Pokud jste nepožádali o resetování hesla, prosím kontaktujte naši podporu na: '.CONTACT_EMAIL, 'reset_password_footer' => 'Pokud jste nepožádali o resetování hesla, prosím kontaktujte naši podporu na: :email',
'limit_users' => 'Omlouváme se, to už přesáhlo limit '.MAX_NUM_USERS.' uživatelů', 'limit_users' => 'Omlouváme se, to už přesáhlo limit :limit uživatelů',
'more_designs_self_host_header' => 'Získejte 6 dalších vzhledů faktur jen za $'.INVOICE_DESIGNS_PRICE, 'more_designs_self_host_header' => 'Získejte 6 dalších vzhledů faktur jen za $:price',
'old_browser' => 'Prosím použijte <a href="'.OUTDATE_BROWSER_URL.'" target="_blank">novější prohlížeč</a>', 'old_browser' => 'Prosím použijte <a href=":link" target="_blank">novější prohlížeč</a>',
'white_label_custom_css' => ':link za $'.WHITE_LABEL_PRICE.' získáte volitelné úpravy a pomůžete podpoře našeho projektu.', 'white_label_custom_css' => ':link za $:price získáte volitelné úpravy a pomůžete podpoře našeho projektu.',
'bank_accounts_help' => 'Připojte si bankovní účet pro automatický import nákladů a tvorbu dodavatelů. K dispozici pro American Express <a href="'.OFX_HOME_URL.'" target="_blank">přes 400 amerických bank.</a>', 'bank_accounts_help' => 'Připojte si bankovní účet pro automatický import nákladů a tvorbu dodavatelů. K dispozici pro American Express <a href=":link" target="_blank">přes 400 amerických bank.</a>',
'security' => [
'too_many_attempts' => 'Mnoho přístupů. Zkuste to prosím za několik minut.', 'pro_plan_remove_logo' => ':link pro odstranění loga Invoice Ninja připojením se k profi plánu',
'wrong_credentials' => 'Neplatný email nebo heslo.', 'pro_plan_remove_logo_link' => 'Klikněte zde',
'confirmation' => 'Váš účet byl potvrzen!', 'invitation_status_sent' => 'Email odeslán',
'wrong_confirmation' => 'Chybný potvrzovací kód.', 'invitation_status_opened' => 'Email otevřen',
'password_forgot' => 'Informace týkající se resetování hesla byla odeslána na Váš email.', 'invitation_status_viewed' => 'Faktura zobrazena',
'password_reset' => 'Heslo bylo změněno úspěšně.', 'email_error_inactive_client' => 'Emaily nemohou být odeslány neaktivním klientům',
'wrong_password_reset' => 'Neplatné heslo. Zkuste znovu', 'email_error_inactive_contact' => 'Emaily nemohou být odeslány neaktivním kontaktům',
], 'email_error_inactive_invoice' => 'Emaily nemohou být odeslány k neaktivním fakturám',
'pro_plan' => [ 'email_error_user_unregistered' => 'Pro odesílání emailů si prosím zaregistrujte účet',
'remove_logo' => ':link pro odstranění loga Invoice Ninja připojením se k profi plánu', 'email_error_user_unconfirmed' => 'Pro posílání emailů potvrďte prosím Váš účet.',
'remove_logo_link' => 'Klikněte zde', 'email_error_invalid_contact_email' => 'Neplatný kontaktní email',
],
'invitation_status' => [
'sent' => 'Email odeslán',
'opened' => 'Email otevřen',
'viewed' => 'Faktura zobrazena',
],
'email_errors' => [
'inactive_client' => 'Emaily nemohou být odeslány neaktivním klientům',
'inactive_contact' => 'Emaily nemohou být odeslány neaktivním kontaktům',
'inactive_invoice' => 'Emaily nemohou být odeslány k neaktivním fakturám',
'user_unregistered' => 'Pro odesílání emailů si prosím zaregistrujte účet',
'user_unconfirmed' => 'Pro posílání emailů potvrďte prosím Váš účet.',
'invalid_contact_email' => 'Neplatný kontaktní email',
],
'navigation' => 'Navigace', 'navigation' => 'Navigace',
'list_invoices' => 'Seznam faktur', 'list_invoices' => 'Seznam faktur',
@ -1059,14 +1045,14 @@ $LANG = array(
'enable_portal_password_help'=>'Umožní Vám nastavit heslo pro každý kontakt. Pokud heslo nastavíte, tak kontakt ho bude pro zobrazení faktury vždy použít.', 'enable_portal_password_help'=>'Umožní Vám nastavit heslo pro každý kontakt. Pokud heslo nastavíte, tak kontakt ho bude pro zobrazení faktury vždy použít.',
'send_portal_password'=>'Generovat heslo automaticky', 'send_portal_password'=>'Generovat heslo automaticky',
'send_portal_password_help'=>'Pokud heslo není nastaveno, bude vygenerováno a zasláno spolu s první fakturou.', 'send_portal_password_help'=>'Pokud heslo není nastaveno, bude vygenerováno a zasláno spolu s první fakturou.',
'expired' => 'Expirované', 'expired' => 'Expirované',
'invalid_card_number' => 'Číslo platební karty není platné.', 'invalid_card_number' => 'Číslo platební karty není platné.',
'invalid_expiry' => 'Datum expirace není platné.', 'invalid_expiry' => 'Datum expirace není platné.',
'invalid_cvv' => 'CVV není platné.', 'invalid_cvv' => 'CVV není platné.',
'cost' => 'Cena', 'cost' => 'Cena',
'create_invoice_for_sample' => 'Poznámka: vytvořte si první fakturu a zde si ji prohlédněte.', 'create_invoice_for_sample' => 'Poznámka: vytvořte si první fakturu a zde si ji prohlédněte.',
// User Permissions // User Permissions
'owner' => 'Vlastník', 'owner' => 'Vlastník',
'administrator' => 'Administrátor', 'administrator' => 'Administrátor',
@ -1084,8 +1070,8 @@ $LANG = array(
'create_all_help' => 'Povolit uživatelům měnit záznamy', 'create_all_help' => 'Povolit uživatelům měnit záznamy',
'view_all_help' => 'Povolit uživatelům zobrazit záznamy, které nevytvořili', 'view_all_help' => 'Povolit uživatelům zobrazit záznamy, které nevytvořili',
'edit_all_help' => 'Povolit uživatelům měnit záznamy, které nevytvořili', 'edit_all_help' => 'Povolit uživatelům měnit záznamy, které nevytvořili',
'view_payment' => 'Zobrazit platbu', 'view_payment' => 'Zobrazit platbu',
'january' => 'Leden', 'january' => 'Leden',
'february' => 'Únor', 'february' => 'Únor',
'march' => 'Březen', 'march' => 'Březen',
@ -1098,7 +1084,7 @@ $LANG = array(
'october' => 'Říjen', 'october' => 'Říjen',
'november' => 'Listopad', 'november' => 'Listopad',
'december' => 'Prosinec', 'december' => 'Prosinec',
// Documents // Documents
'documents_header' => 'Documents:', 'documents_header' => 'Documents:',
'email_documents_header' => 'Documents:', 'email_documents_header' => 'Documents:',
@ -1111,17 +1097,15 @@ $LANG = array(
'document_email_attachment' => 'Attach Documents', 'document_email_attachment' => 'Attach Documents',
'download_documents' => 'Download Documents (:size)', 'download_documents' => 'Download Documents (:size)',
'documents_from_expenses' => 'From Expenses:', 'documents_from_expenses' => 'From Expenses:',
'dropzone' => array(// See http://www.dropzonejs.com/#config-dictDefaultMessage 'dropzone_default_message' => 'Drop files or click to upload',
'DefaultMessage' => 'Drop files or click to upload', 'dropzone_fallback_message' => 'Your browser does not support drag\'n\'drop file uploads.',
'FallbackMessage' => 'Your browser does not support drag\'n\'drop file uploads.', 'dropzone_fallback_text' => 'Please use the fallback form below to upload your files like in the olden days.',
'FallbackText' => 'Please use the fallback form below to upload your files like in the olden days.', 'dropzone_file_too_big' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.',
'FileTooBig' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.', 'dropzone_invalid_file_type' => 'You can\'t upload files of this type.',
'InvalidFileType' => 'You can\'t upload files of this type.', 'dropzone_response_error' => 'Server responded with {{statusCode}} code.',
'ResponseError' => 'Server responded with {{statusCode}} code.', 'dropzone_cancel_upload' => 'Cancel upload',
'CancelUpload' => 'Cancel upload', 'dropzone_cancel_upload_confirmation' => 'Are you sure you want to cancel this upload?',
'CancelUploadConfirmation' => 'Are you sure you want to cancel this upload?', 'dropzone_remove_file' => 'Remove file',
'RemoveFile' => 'Remove file',
),
'documents' => 'Documents', 'documents' => 'Documents',
'document_date' => 'Document Date', 'document_date' => 'Document Date',
'document_size' => 'Size', 'document_size' => 'Size',
@ -1130,11 +1114,11 @@ $LANG = array(
'enable_client_portal_help' => 'Show/hide the client portal.', 'enable_client_portal_help' => 'Show/hide the client portal.',
'enable_client_portal_dashboard' => 'Dashboard', 'enable_client_portal_dashboard' => 'Dashboard',
'enable_client_portal_dashboard_help' => 'Show/hide the dashboard page in the client portal.', 'enable_client_portal_dashboard_help' => 'Show/hide the dashboard page in the client portal.',
// Plans // Plans
'account_management' => 'Account Management', 'account_management' => 'Account Management',
'plan_status' => 'Plan Status', 'plan_status' => 'Plan Status',
'plan_upgrade' => 'Upgrade', 'plan_upgrade' => 'Upgrade',
'plan_change' => 'Change Plan', 'plan_change' => 'Change Plan',
'pending_change_to' => 'Changes To', 'pending_change_to' => 'Changes To',
@ -1164,9 +1148,9 @@ $LANG = array(
'plan_paid' => 'Term Started', 'plan_paid' => 'Term Started',
'plan_started' => 'Plan Started', 'plan_started' => 'Plan Started',
'plan_expires' => 'Plan Expires', 'plan_expires' => 'Plan Expires',
'white_label_button' => 'White Label', 'white_label_button' => 'White Label',
'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.',
'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.',
'enterprise_plan_product' => 'Enterprise Plan', 'enterprise_plan_product' => 'Enterprise Plan',
@ -1186,7 +1170,7 @@ $LANG = array(
'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.', 'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.',
'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.', 'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.',
'return_to_app' => 'Return to app', 'return_to_app' => 'Return to app',
); );
return $LANG; return $LANG;

View File

@ -262,7 +262,7 @@ return array(
'email_salutation' => 'Kære :name,', 'email_salutation' => 'Kære :name,',
'email_signature' => 'Med venlig hilsen,', 'email_signature' => 'Med venlig hilsen,',
'email_from' => 'Invoice Ninja Teamet', 'email_from' => 'Invoice Ninja Teamet',
'user_email_footer' => 'For at justere varslings indstillingene besøg venligst'.SITE_URL.'/settings/notifications', 'user_email_footer' => 'For at justere varslings indstillingene besøg venligst :link',
'invoice_link_message' => 'Hvis du vil se din klient faktura klik på linket under:', 'invoice_link_message' => 'Hvis du vil se din klient faktura klik på linket under:',
'notification_invoice_paid_subject' => 'Faktura :invoice betalt af :client', 'notification_invoice_paid_subject' => 'Faktura :invoice betalt af :client',
'notification_invoice_sent_subject' => 'Faktura :invoice sendt til :client', 'notification_invoice_sent_subject' => 'Faktura :invoice sendt til :client',
@ -271,7 +271,7 @@ return array(
'notification_invoice_sent' => 'En e-mail er blevet sendt til :client med faktura :invoice pålydende :amount.', 'notification_invoice_sent' => 'En e-mail er blevet sendt til :client med faktura :invoice pålydende :amount.',
'notification_invoice_viewed' => ':client har set faktura :invoice pålydende :amount.', 'notification_invoice_viewed' => ':client har set faktura :invoice pålydende :amount.',
'reset_password' => 'Du kan nulstille din adgangskode ved at besøge følgende link:', 'reset_password' => 'Du kan nulstille din adgangskode ved at besøge følgende link:',
'reset_password_footer' => 'Hvis du ikke bad om at få nulstillet din adgangskode kontakt venligst kundeservice: '.CONTACT_EMAIL, 'reset_password_footer' => 'Hvis du ikke bad om at få nulstillet din adgangskode kontakt venligst kundeservice: :email',
// Payment page // Payment page
'secure_payment' => 'Sikker betaling', 'secure_payment' => 'Sikker betaling',
@ -280,22 +280,9 @@ return array(
'expiration_year' => 'Udløbsår', 'expiration_year' => 'Udløbsår',
'cvv' => 'Kontrolcifre', 'cvv' => 'Kontrolcifre',
// Security alerts
'security' => [
'too_many_attempts' => 'For mange forsøg. Prøv igen om nogen få minutter.',
'wrong_credentials' => 'Forkert e-mail eller adgangskode.',
'confirmation' => 'Din konto har blevet bekræftet!',
'wrong_confirmation' => 'Forkert bekræftelseskode.',
'password_forgot' => 'Informationen om nulstilling af din adgangskode er blevet sendt til din e-mail.',
'password_reset' => 'Adgangskode ændret',
'wrong_password_reset' => 'Ugyldig adgangskode. Prøv på ny',
],
// Pro Plan // Pro Plan
'pro_plan' => [ 'pro_plan_remove_logo' => ':link for at fjerne Invoice Ninja-logoet, opgrader til en Pro Plan',
'remove_logo' => ':link for at fjerne Invoice Ninja-logoet, opgrader til en Pro Plan', 'pro_plan_remove_logo_link' => 'Klik her',
'remove_logo_link' => 'Klik her',
],
'logout' => 'Log ud', 'logout' => 'Log ud',
'sign_up_to_save' => 'Registrer dig for at gemme dit arbejde', 'sign_up_to_save' => 'Registrer dig for at gemme dit arbejde',
@ -419,7 +406,7 @@ return array(
'active' => 'Aktiv', 'active' => 'Aktiv',
'pending' => 'Afventer', 'pending' => 'Afventer',
'deleted_user' => 'Bruger slettet', 'deleted_user' => 'Bruger slettet',
'limit_users' => 'Desværre, dette vil overstige grænsen på '.MAX_NUM_USERS.' brugere', 'limit_users' => 'Desværre, dette vil overstige grænsen på :limit brugere',
'confirm_email_invoice' => 'Er du sikker på at du vil sende en e-mail med denne faktura?', 'confirm_email_invoice' => 'Er du sikker på at du vil sende en e-mail med denne faktura?',
'confirm_email_quote' => 'Er du sikker på du ville sende en e-mail med dette tilbud?', 'confirm_email_quote' => 'Er du sikker på du ville sende en e-mail med dette tilbud?',
@ -453,7 +440,7 @@ return array(
'more_designs_title' => 'Yderligere faktura designs', 'more_designs_title' => 'Yderligere faktura designs',
'more_designs_cloud_header' => 'Skift til Pro for flere faktura designs', 'more_designs_cloud_header' => 'Skift til Pro for flere faktura designs',
'more_designs_cloud_text' => '', 'more_designs_cloud_text' => '',
'more_designs_self_host_header' => 'Få 6 flere faktura designs for kun $'.INVOICE_DESIGNS_PRICE, 'more_designs_self_host_header' => 'Få 6 flere faktura designs for kun $:price',
'more_designs_self_host_text' => '', 'more_designs_self_host_text' => '',
'buy' => 'Køb', 'buy' => 'Køb',
'bought_designs' => 'Yderligere faktura designs tilføjet', 'bought_designs' => 'Yderligere faktura designs tilføjet',
@ -704,7 +691,7 @@ return array(
'email_error' => 'Der opstod et problem ved afsendelse af e-mailen', 'email_error' => 'Der opstod et problem ved afsendelse af e-mailen',
'created_by_recurring' => 'Oprettet af gentaget faktura nr.: :invoice', 'created_by_recurring' => 'Oprettet af gentaget faktura nr.: :invoice',
'confirm_recurring_timing' => 'Bemærk: e-mail bliver sendt i starten af timen.', 'confirm_recurring_timing' => 'Bemærk: e-mail bliver sendt i starten af timen.',
'old_browser' => 'Din browser er registreret som værende af ældre dato og den vil ikke kunne bruges, skift til en <a href="'.OUTDATE_BROWSER_URL.'" target="_blank">nyere version browser</a>', 'old_browser' => 'Din browser er registreret som værende af ældre dato og den vil ikke kunne bruges, skift til en <a href=":link" target="_blank">nyere version browser</a>',
'payment_terms_help' => 'Sætter standard fakturaens forfalds dato', 'payment_terms_help' => 'Sætter standard fakturaens forfalds dato',
'unlink_account' => 'Fjern sammenkædning af konti', 'unlink_account' => 'Fjern sammenkædning af konti',
'unlink' => 'Fjern sammenkædning', 'unlink' => 'Fjern sammenkædning',
@ -800,11 +787,10 @@ return array(
'invoice_quote_number' => 'Invoice and Quote Numbers', 'invoice_quote_number' => 'Invoice and Quote Numbers',
'invoice_charges' => 'Invoice Charges', 'invoice_charges' => 'Invoice Charges',
'invitation_status' => [ 'invitation_status_sent' => 'Email Sent',
'sent' => 'Email Sent', 'invitation_status_opened' => 'Email Openend',
'opened' => 'Email Openend', 'invitation_status_viewed' => 'Invoice Viewed',
'viewed' => 'Invoice Viewed',
],
'notification_invoice_bounced' => 'We were unable to deliver Invoice :invoice to :contact.', 'notification_invoice_bounced' => 'We were unable to deliver Invoice :invoice to :contact.',
'notification_invoice_bounced_subject' => 'Unable to deliver Invoice :invoice', 'notification_invoice_bounced_subject' => 'Unable to deliver Invoice :invoice',
'notification_quote_bounced' => 'We were unable to deliver Quote :invoice to :contact.', 'notification_quote_bounced' => 'We were unable to deliver Quote :invoice to :contact.',
@ -926,14 +912,12 @@ return array(
'no_mapper' => 'No valid mapping for file', 'no_mapper' => 'No valid mapping for file',
'invalid_csv_header' => 'Invalid CSV Header', 'invalid_csv_header' => 'Invalid CSV Header',
'email_errors' => [ 'email_error_inactive_client' => 'Emails can not be sent to inactive clients',
'inactive_client' => 'Emails can not be sent to inactive clients', 'email_error_inactive_contact' => 'Emails can not be sent to inactive contacts',
'inactive_contact' => 'Emails can not be sent to inactive contacts', 'email_error_inactive_invoice' => 'Emails can not be sent to inactive invoices',
'inactive_invoice' => 'Emails can not be sent to inactive invoices', 'email_error_user_unregistered' => 'Please register your account to send emails',
'user_unregistered' => 'Please register your account to send emails', 'email_error_user_unconfirmed' => 'Please confirm your account to send emails',
'user_unconfirmed' => 'Please confirm your account to send emails', 'email_error_invalid_contact_email' => 'Invalid contact email',
'invalid_contact_email' => 'Invalid contact email',
],
'client_portal' => 'Client Portal', 'client_portal' => 'Client Portal',
'admin' => 'Admin', 'admin' => 'Admin',
@ -987,7 +971,7 @@ return array(
'email_designs' => 'Email Designs', 'email_designs' => 'Email Designs',
'assigned_when_sent' => 'Assigned when sent', 'assigned_when_sent' => 'Assigned when sent',
'white_label_custom_css' => ':link for $'.WHITE_LABEL_PRICE.' to enable custom styling and help support our project.', 'white_label_custom_css' => ':link for $:price to enable custom styling and help support our project.',
'white_label_purchase_link' => 'Purchase a white label license', 'white_label_purchase_link' => 'Purchase a white label license',
// Expense / vendor // Expense / vendor
@ -1094,7 +1078,7 @@ return array(
'archived_bank_account' => 'Successfully archived bank account', 'archived_bank_account' => 'Successfully archived bank account',
'created_bank_account' => 'Successfully created bank account', 'created_bank_account' => 'Successfully created bank account',
'validate_bank_account' => 'Validate Bank Account', 'validate_bank_account' => 'Validate Bank Account',
'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href="'.OFX_HOME_URL.'" target="_blank">400+ US banks.</a>', 'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href=":link" target="_blank">400+ US banks.</a>',
'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.', 'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.',
'bank_password_warning' => 'Warning: your password may be transmitted in plain text, consider enabling HTTPS.', 'bank_password_warning' => 'Warning: your password may be transmitted in plain text, consider enabling HTTPS.',
'username' => 'Username', 'username' => 'Username',
@ -1129,7 +1113,7 @@ return array(
'trial_call_to_action' => 'Start Free Trial', 'trial_call_to_action' => 'Start Free Trial',
'trial_success' => 'Successfully enabled two week free pro plan trial', 'trial_success' => 'Successfully enabled two week free pro plan trial',
'overdue' => 'Overdue', 'overdue' => 'Overdue',
'white_label_text' => 'Purchase a ONE YEAR white label license for $'.WHITE_LABEL_PRICE.' to remove the Invoice Ninja branding from the client portal and help support our project.', 'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding from the client portal and help support our project.',
'navigation' => 'Navigation', 'navigation' => 'Navigation',
'list_invoices' => 'List Invoices', 'list_invoices' => 'List Invoices',
@ -1160,14 +1144,14 @@ return array(
'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.', 'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.',
'send_portal_password'=>'Generate password automatically', 'send_portal_password'=>'Generate password automatically',
'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.', 'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.',
'expired' => 'Expired', 'expired' => 'Expired',
'invalid_card_number' => 'The credit card number is not valid.', 'invalid_card_number' => 'The credit card number is not valid.',
'invalid_expiry' => 'The expiration date is not valid.', 'invalid_expiry' => 'The expiration date is not valid.',
'invalid_cvv' => 'The CVV is not valid.', 'invalid_cvv' => 'The CVV is not valid.',
'cost' => 'Cost', 'cost' => 'Cost',
'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.', 'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.',
// User Permissions // User Permissions
'owner' => 'Owner', 'owner' => 'Owner',
'administrator' => 'Administrator', 'administrator' => 'Administrator',
@ -1185,8 +1169,8 @@ return array(
'create_all_help' => 'Allow user to create and modify records', 'create_all_help' => 'Allow user to create and modify records',
'view_all_help' => 'Allow user to view records they didn\'t create', 'view_all_help' => 'Allow user to view records they didn\'t create',
'edit_all_help' => 'Allow user to modify records they didn\'t create', 'edit_all_help' => 'Allow user to modify records they didn\'t create',
'view_payment' => 'View Payment', 'view_payment' => 'View Payment',
'january' => 'January', 'january' => 'January',
'february' => 'February', 'february' => 'February',
'march' => 'March', 'march' => 'March',
@ -1212,17 +1196,15 @@ return array(
'document_email_attachment' => 'Attach Documents', 'document_email_attachment' => 'Attach Documents',
'download_documents' => 'Download Documents (:size)', 'download_documents' => 'Download Documents (:size)',
'documents_from_expenses' => 'From Expenses:', 'documents_from_expenses' => 'From Expenses:',
'dropzone' => array(// See http://www.dropzonejs.com/#config-dictDefaultMessage 'dropzone_default_message' => 'Drop files or click to upload',
'DefaultMessage' => 'Drop files or click to upload', 'dropzone_fallback_message' => 'Your browser does not support drag\'n\'drop file uploads.',
'FallbackMessage' => 'Your browser does not support drag\'n\'drop file uploads.', 'dropzone_fallback_text' => 'Please use the fallback form below to upload your files like in the olden days.',
'FallbackText' => 'Please use the fallback form below to upload your files like in the olden days.', 'dropzone_file_too_big' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.',
'FileTooBig' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.', 'dropzone_invalid_file_type' => 'You can\'t upload files of this type.',
'InvalidFileType' => 'You can\'t upload files of this type.', 'dropzone_response_error' => 'Server responded with {{statusCode}} code.',
'ResponseError' => 'Server responded with {{statusCode}} code.', 'dropzone_cancel_upload' => 'Cancel upload',
'CancelUpload' => 'Cancel upload', 'dropzone_cancel_upload_confirmation' => 'Are you sure you want to cancel this upload?',
'CancelUploadConfirmation' => 'Are you sure you want to cancel this upload?', 'dropzone_remove_file' => 'Remove file',
'RemoveFile' => 'Remove file',
),
'documents' => 'Documents', 'documents' => 'Documents',
'document_date' => 'Document Date', 'document_date' => 'Document Date',
'document_size' => 'Size', 'document_size' => 'Size',
@ -1231,11 +1213,11 @@ return array(
'enable_client_portal_help' => 'Show/hide the client portal.', 'enable_client_portal_help' => 'Show/hide the client portal.',
'enable_client_portal_dashboard' => 'Dashboard', 'enable_client_portal_dashboard' => 'Dashboard',
'enable_client_portal_dashboard_help' => 'Show/hide the dashboard page in the client portal.', 'enable_client_portal_dashboard_help' => 'Show/hide the dashboard page in the client portal.',
// Plans // Plans
'account_management' => 'Account Management', 'account_management' => 'Account Management',
'plan_status' => 'Plan Status', 'plan_status' => 'Plan Status',
'plan_upgrade' => 'Upgrade', 'plan_upgrade' => 'Upgrade',
'plan_change' => 'Change Plan', 'plan_change' => 'Change Plan',
'pending_change_to' => 'Changes To', 'pending_change_to' => 'Changes To',
@ -1265,9 +1247,9 @@ return array(
'plan_paid' => 'Term Started', 'plan_paid' => 'Term Started',
'plan_started' => 'Plan Started', 'plan_started' => 'Plan Started',
'plan_expires' => 'Plan Expires', 'plan_expires' => 'Plan Expires',
'white_label_button' => 'White Label', 'white_label_button' => 'White Label',
'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.',
'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.',
'enterprise_plan_product' => 'Enterprise Plan', 'enterprise_plan_product' => 'Enterprise Plan',
@ -1287,5 +1269,5 @@ return array(
'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.', 'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.',
'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.', 'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.',
'return_to_app' => 'Return to app', 'return_to_app' => 'Return to app',
); );

View File

@ -262,7 +262,7 @@ return array(
'email_salutation' => 'Sehr geehrte/r :name,', 'email_salutation' => 'Sehr geehrte/r :name,',
'email_signature' => 'Mit freundlichen Grüßen,', 'email_signature' => 'Mit freundlichen Grüßen,',
'email_from' => 'Das InvoiceNinja Team', 'email_from' => 'Das InvoiceNinja Team',
'user_email_footer' => 'Um deine E-Mail-Benachrichtigungen anzupassen besuche bitte '.SITE_URL.'/settings/notifications', 'user_email_footer' => 'Um deine E-Mail-Benachrichtigungen anzupassen besuche bitte :link',
'invoice_link_message' => 'Um deine Kundenrechnung anzuschauen, klicke auf den folgenden Link:', 'invoice_link_message' => 'Um deine Kundenrechnung anzuschauen, klicke auf den folgenden Link:',
'notification_invoice_paid_subject' => 'Die Rechnung :invoice wurde von :client bezahlt.', 'notification_invoice_paid_subject' => 'Die Rechnung :invoice wurde von :client bezahlt.',
'notification_invoice_sent_subject' => 'Die Rechnung :invoice wurde an :client versendet.', 'notification_invoice_sent_subject' => 'Die Rechnung :invoice wurde an :client versendet.',
@ -271,7 +271,7 @@ return array(
'notification_invoice_sent' => 'Dem Kunden :client wurde die Rechnung :invoice über :amount versendet.', 'notification_invoice_sent' => 'Dem Kunden :client wurde die Rechnung :invoice über :amount versendet.',
'notification_invoice_viewed' => 'Der Kunde :client hat sich die Rechnung :invoice über :amount angesehen.', 'notification_invoice_viewed' => 'Der Kunde :client hat sich die Rechnung :invoice über :amount angesehen.',
'reset_password' => 'Du kannst dein Passwort zurücksetzen, indem du auf den folgenden Link klickst:', '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, 'reset_password_footer' => 'Wenn du das Zurücksetzen des Passworts nicht beantragt hast, benachrichtige bitte unseren Support: :email',
// Payment page // Payment page
'secure_payment' => 'Sichere Zahlung', 'secure_payment' => 'Sichere Zahlung',
@ -280,22 +280,9 @@ return array(
'expiration_year' => 'Ablaufjahr', 'expiration_year' => 'Ablaufjahr',
'cvv' => 'Kartenprüfziffer', 'cvv' => 'Kartenprüfziffer',
// Security alerts
'security' => array(
'too_many_attempts' => 'Zu viele Versuche. Bitte probiere 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
'pro_plan' => [ 'pro_plan_remove_logo' => ':link, um das InvoiceNinja-Logo zu entfernen, indem du dem Pro Plan beitrittst',
'remove_logo' => ':link, um das InvoiceNinja-Logo zu entfernen, indem du dem Pro Plan beitrittst', 'pro_plan_remove_logo_link' => 'Klicke hier',
'remove_logo_link' => 'Klicke hier',
],
'logout' => 'Ausloggen', 'logout' => 'Ausloggen',
'sign_up_to_save' => 'Melde dich an, um deine Arbeit zu speichern', 'sign_up_to_save' => 'Melde dich an, um deine Arbeit zu speichern',
@ -419,7 +406,7 @@ return array(
'active' => 'Aktiv', 'active' => 'Aktiv',
'pending' => 'Ausstehend', 'pending' => 'Ausstehend',
'deleted_user' => 'Benutzer erfolgreich gelöscht', 'deleted_user' => 'Benutzer erfolgreich gelöscht',
'limit_users' => 'Entschuldige, das würde das Limit von '.MAX_NUM_USERS.' Benutzern überschreiten', 'limit_users' => 'Entschuldige, das würde das Limit von :limit Benutzern überschreiten',
'confirm_email_invoice' => 'Bist du sicher, dass du diese Rechnung per E-Mail versenden möchtest?', 'confirm_email_invoice' => 'Bist du sicher, dass du diese Rechnung per E-Mail versenden möchtest?',
'confirm_email_quote' => 'Bist du sicher, dass du dieses Angebot per E-Mail versenden möchtest', 'confirm_email_quote' => 'Bist du sicher, dass du dieses Angebot per E-Mail versenden möchtest',
@ -453,7 +440,7 @@ return array(
'more_designs_title' => 'Zusätzliche Rechnungsdesigns', 'more_designs_title' => 'Zusätzliche Rechnungsdesigns',
'more_designs_cloud_header' => 'Werde Pro-Mitglied für zusätzliche Rechnungsdesigns', 'more_designs_cloud_header' => 'Werde Pro-Mitglied für zusätzliche Rechnungsdesigns',
'more_designs_cloud_text' => '', 'more_designs_cloud_text' => '',
'more_designs_self_host_header' => 'Erhalte 6 zusätzliche Rechnungsdesigns für nur $'.INVOICE_DESIGNS_PRICE, 'more_designs_self_host_header' => 'Erhalte 6 zusätzliche Rechnungsdesigns für nur $:price',
'more_designs_self_host_text' => '', 'more_designs_self_host_text' => '',
'buy' => 'Kaufen', 'buy' => 'Kaufen',
'bought_designs' => 'Die zusätzliche Rechnungsdesigns wurden erfolgreich hinzugefügt', 'bought_designs' => 'Die zusätzliche Rechnungsdesigns wurden erfolgreich hinzugefügt',
@ -703,7 +690,7 @@ return array(
'email_error' => 'Es gab ein Problem beim Senden dieses E-Mails.', 'email_error' => 'Es gab ein Problem beim Senden dieses E-Mails.',
'confirm_recurring_timing' => 'Beachten Sie: E-Mails werden zu Beginn der Stunde versendet.', 'confirm_recurring_timing' => 'Beachten Sie: E-Mails werden zu Beginn der Stunde versendet.',
'old_browser' => 'Bitte verwenden Sie einen <a href="'.OUTDATE_BROWSER_URL.'" target="_blank">neueren Browser</a>', 'old_browser' => 'Bitte verwenden Sie einen <a href=":link" target="_blank">neueren Browser</a>',
'payment_terms_help' => 'Setzt das Standardfälligkeitsdatum', 'payment_terms_help' => 'Setzt das Standardfälligkeitsdatum',
'unlink_account' => 'Konten trennen', 'unlink_account' => 'Konten trennen',
'unlink' => 'Trennen', 'unlink' => 'Trennen',
@ -800,11 +787,10 @@ return array(
'invoice_quote_number' => 'Rechnungs- und Angebotsnummern', 'invoice_quote_number' => 'Rechnungs- und Angebotsnummern',
'invoice_charges' => 'Rechnungsgebühren', 'invoice_charges' => 'Rechnungsgebühren',
'invitation_status' => [ 'invitation_status_sent' => 'E-Mail versendet',
'sent' => 'E-Mail versendet', 'invitation_status_opened' => 'E-Mail geöffnet',
'opened' => 'E-Mail geöffnet', 'invitation_status_viewed' => 'Rechnung angesehen',
'viewed' => 'Rechnung angesehen',
],
'notification_invoice_bounced' => 'Die Rechnung :invoice an :contact konnte nicht zugestellt werden.', 'notification_invoice_bounced' => 'Die Rechnung :invoice an :contact konnte nicht zugestellt werden.',
'notification_invoice_bounced_subject' => 'Rechnung :invoice nicht zugestellt.', 'notification_invoice_bounced_subject' => 'Rechnung :invoice nicht zugestellt.',
'notification_quote_bounced' => 'Das Angebot :invoice an :contact konnte nicht zugestellt werden.', 'notification_quote_bounced' => 'Das Angebot :invoice an :contact konnte nicht zugestellt werden.',
@ -927,14 +913,12 @@ return array(
'no_mapper' => 'Kein gültiges Mapping für die Datei', 'no_mapper' => 'Kein gültiges Mapping für die Datei',
'invalid_csv_header' => 'Ungültiger CSV Header', 'invalid_csv_header' => 'Ungültiger CSV Header',
'email_errors' => [ 'email_error_inactive_client' => 'Emails können nicht zu inaktiven Kunden gesendet werden',
'inactive_client' => 'Emails können nicht zu inaktiven Kunden gesendet werden', 'email_error_inactive_contact' => 'Emails können nicht zu inaktiven Kontakten gesendet werden',
'inactive_contact' => 'Emails können nicht zu inaktiven Kontakten gesendet werden', 'email_error_inactive_invoice' => 'Emails können nicht zu inaktiven Rechnungen gesendet werden',
'inactive_invoice' => 'Emails können nicht zu inaktiven Rechnungen gesendet werden', 'email_error_user_unregistered' => 'Bitte registrieren Sie sich um Emails zu versenden',
'user_unregistered' => 'Bitte registrieren Sie sich um Emails zu versenden', 'email_error_user_unconfirmed' => 'Bitte bestätigen Sie Ihr Konto um Emails zu senden',
'user_unconfirmed' => 'Bitte bestätigen Sie Ihr Konto um Emails zu senden', 'email_error_invalid_contact_email' => 'Ungültige Kontakt Email Adresse',
'invalid_contact_email' => 'Ungültige Kontakt Email Adresse',
],
'client_portal' => 'Kunden-Portal', 'client_portal' => 'Kunden-Portal',
'admin' => 'Admin', 'admin' => 'Admin',
@ -988,7 +972,7 @@ return array(
'email_designs' => 'Email Designs', 'email_designs' => 'Email Designs',
'assigned_when_sent' => 'Assigned when sent', 'assigned_when_sent' => 'Assigned when sent',
'white_label_custom_css' => ':link for $'.WHITE_LABEL_PRICE.' to enable custom styling and help support our project.', 'white_label_custom_css' => ':link for $:price to enable custom styling and help support our project.',
'white_label_purchase_link' => 'Purchase a white label license', 'white_label_purchase_link' => 'Purchase a white label license',
// Expense / vendor // Expense / vendor
@ -1095,7 +1079,7 @@ return array(
'archived_bank_account' => 'Bankverbindung erfolgreich archiviert', 'archived_bank_account' => 'Bankverbindung erfolgreich archiviert',
'created_bank_account' => 'Bankverbindung erfolgreich erstellt', 'created_bank_account' => 'Bankverbindung erfolgreich erstellt',
'validate_bank_account' => 'Bankverbindung bestätigen', 'validate_bank_account' => 'Bankverbindung bestätigen',
'bank_accounts_help' => 'Fügen Sie eine Bankverbindung hinzu, um Ausgaben automatisch zu importieren und Lieferanten zu erstellen. Unterstützt American Express und <a href="'.OFX_HOME_URL.'" target="_blank">400+ US-Banken.</a>', 'bank_accounts_help' => 'Fügen Sie eine Bankverbindung hinzu, um Ausgaben automatisch zu importieren und Lieferanten zu erstellen. Unterstützt American Express und <a href=":link" target="_blank">400+ US-Banken.</a>',
'bank_password_help' => 'Info: Ihr Passwort wird sicher übertragen und zu keiner Zeit auf unseren Servern gespeichert.', 'bank_password_help' => 'Info: Ihr Passwort wird sicher übertragen und zu keiner Zeit auf unseren Servern gespeichert.',
'bank_password_warning' => 'Warnung: Ihr Passwort könnte in Klartext übertragen werden, wir empfehlen Ihnen HTTPS zu verwenden.', 'bank_password_warning' => 'Warnung: Ihr Passwort könnte in Klartext übertragen werden, wir empfehlen Ihnen HTTPS zu verwenden.',
'username' => 'Benutzername', 'username' => 'Benutzername',
@ -1130,7 +1114,7 @@ return array(
'trial_call_to_action' => 'Kostenlose Probezeit starten', 'trial_call_to_action' => 'Kostenlose Probezeit starten',
'trial_success' => 'Erfolgreich eine 2-Wochen Testversion aktiviert', 'trial_success' => 'Erfolgreich eine 2-Wochen Testversion aktiviert',
'overdue' => 'Überfällig', 'overdue' => 'Überfällig',
'white_label_text' => 'Kaufen Sie eine 1 Jahres Whitelabel Lizenz zum Preis von $'.WHITE_LABEL_PRICE.' um das Invoice Ninja Branding vom Kundenportal zu entfernen und unser Projekt zu unterstützen.', 'white_label_text' => 'Kaufen Sie eine 1 Jahres Whitelabel Lizenz zum Preis von $:price um das Invoice Ninja Branding vom Kundenportal zu entfernen und unser Projekt zu unterstützen.',
'navigation' => 'Navigation', 'navigation' => 'Navigation',
'list_invoices' => 'Liste Rechnungen', 'list_invoices' => 'Liste Rechnungen',
@ -1161,14 +1145,14 @@ return array(
'enable_portal_password_help'=>'Erlaubt Ihnen ein Passwort für jeden Kontakt zu erstellen. Wenn ein Passwort erstellt wurde, muss der Kunde dieses eingeben, bevor er eine Rechnung ansehen darf.', 'enable_portal_password_help'=>'Erlaubt Ihnen ein Passwort für jeden Kontakt zu erstellen. Wenn ein Passwort erstellt wurde, muss der Kunde dieses eingeben, bevor er eine Rechnung ansehen darf.',
'send_portal_password'=>'Erstelle das Passwort automatisch', 'send_portal_password'=>'Erstelle das Passwort automatisch',
'send_portal_password_help'=>'Wenn kein Passwort gesetzt wurde, wird eins generiert und mit der ersten Rechnung verschickt.', 'send_portal_password_help'=>'Wenn kein Passwort gesetzt wurde, wird eins generiert und mit der ersten Rechnung verschickt.',
'expired' => 'Abgelaufen', 'expired' => 'Abgelaufen',
'invalid_card_number' => 'Die Kreditkartennummer ist nicht gültig.', 'invalid_card_number' => 'Die Kreditkartennummer ist nicht gültig.',
'invalid_expiry' => 'Das Ablaufdatum ist nicht gültig.', 'invalid_expiry' => 'Das Ablaufdatum ist nicht gültig.',
'invalid_cvv' => 'Der CVV Code ist nicht gültig.', 'invalid_cvv' => 'Der CVV Code ist nicht gültig.',
'cost' => 'Kosten', 'cost' => 'Kosten',
'create_invoice_for_sample' => 'Hinweis: Erstellen Sie Ihre erste Rechnung um hier eine Vorschau zu sehen.', 'create_invoice_for_sample' => 'Hinweis: Erstellen Sie Ihre erste Rechnung um hier eine Vorschau zu sehen.',
// User Permissions // User Permissions
'owner' => 'Eigentümer', 'owner' => 'Eigentümer',
'administrator' => 'Administrator', 'administrator' => 'Administrator',
@ -1186,8 +1170,8 @@ return array(
'create_all_help' => 'Allow user to create and modify records', 'create_all_help' => 'Allow user to create and modify records',
'view_all_help' => 'Allow user to view records they didn\'t create', 'view_all_help' => 'Allow user to view records they didn\'t create',
'edit_all_help' => 'Allow user to modify records they didn\'t create', 'edit_all_help' => 'Allow user to modify records they didn\'t create',
'view_payment' => 'Zahlung zeigen', 'view_payment' => 'Zahlung zeigen',
'january' => 'Januar', 'january' => 'Januar',
'february' => 'Februar', 'february' => 'Februar',
'march' => 'März', 'march' => 'März',
@ -1213,17 +1197,15 @@ return array(
'document_email_attachment' => 'Attach Documents', 'document_email_attachment' => 'Attach Documents',
'download_documents' => 'Download Documents (:size)', 'download_documents' => 'Download Documents (:size)',
'documents_from_expenses' => 'From Expenses:', 'documents_from_expenses' => 'From Expenses:',
'dropzone' => array(// See http://www.dropzonejs.com/#config-dictDefaultMessage 'dropzone_default_message' => 'Drop files or click to upload',
'DefaultMessage' => 'Drop files or click to upload', 'dropzone_fallback_message' => 'Your browser does not support drag\'n\'drop file uploads.',
'FallbackMessage' => 'Your browser does not support drag\'n\'drop file uploads.', 'dropzone_fallback_text' => 'Please use the fallback form below to upload your files like in the olden days.',
'FallbackText' => 'Please use the fallback form below to upload your files like in the olden days.', 'dropzone_file_too_big' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.',
'FileTooBig' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.', 'dropzone_invalid_file_type' => 'You can\'t upload files of this type.',
'InvalidFileType' => 'You can\'t upload files of this type.', 'dropzone_response_error' => 'Server responded with {{statusCode}} code.',
'ResponseError' => 'Server responded with {{statusCode}} code.', 'dropzone_cancel_upload' => 'Cancel upload',
'CancelUpload' => 'Cancel upload', 'dropzone_cancel_upload_confirmation' => 'Are you sure you want to cancel this upload?',
'CancelUploadConfirmation' => 'Are you sure you want to cancel this upload?', 'dropzone_remove_file' => 'Remove file',
'RemoveFile' => 'Remove file',
),
'documents' => 'Documents', 'documents' => 'Documents',
'document_date' => 'Document Date', 'document_date' => 'Document Date',
'document_size' => 'Size', 'document_size' => 'Size',
@ -1232,11 +1214,11 @@ return array(
'enable_client_portal_help' => 'Show/hide the client portal.', 'enable_client_portal_help' => 'Show/hide the client portal.',
'enable_client_portal_dashboard' => 'Dashboard', 'enable_client_portal_dashboard' => 'Dashboard',
'enable_client_portal_dashboard_help' => 'Show/hide the dashboard page in the client portal.', 'enable_client_portal_dashboard_help' => 'Show/hide the dashboard page in the client portal.',
// Plans // Plans
'account_management' => 'Account Management', 'account_management' => 'Account Management',
'plan_status' => 'Plan Status', 'plan_status' => 'Plan Status',
'plan_upgrade' => 'Upgrade', 'plan_upgrade' => 'Upgrade',
'plan_change' => 'Change Plan', 'plan_change' => 'Change Plan',
'pending_change_to' => 'Changes To', 'pending_change_to' => 'Changes To',
@ -1266,9 +1248,9 @@ return array(
'plan_paid' => 'Term Started', 'plan_paid' => 'Term Started',
'plan_started' => 'Plan Started', 'plan_started' => 'Plan Started',
'plan_expires' => 'Plan Expires', 'plan_expires' => 'Plan Expires',
'white_label_button' => 'White Label', 'white_label_button' => 'White Label',
'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.',
'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.',
'enterprise_plan_product' => 'Enterprise Plan', 'enterprise_plan_product' => 'Enterprise Plan',
@ -1288,5 +1270,5 @@ return array(
'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.', 'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.',
'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.', 'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.',
'return_to_app' => 'Return to app', 'return_to_app' => 'Return to app',
); );

View File

@ -992,40 +992,26 @@ $LANG = array(
'overdue' => 'Overdue', 'overdue' => 'Overdue',
'white_label_text' => 'Purchase a ONE YEAR white label license for $'.WHITE_LABEL_PRICE.' to remove the Invoice Ninja branding from the client portal and help support our project.', 'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding from the client portal and help support our project.',
'user_email_footer' => 'To adjust your email notification settings please visit '.SITE_URL.'/settings/notifications', 'user_email_footer' => 'To adjust your email notification settings please visit :link',
'reset_password_footer' => 'If you did not request this password reset please email our support: '.CONTACT_EMAIL, 'reset_password_footer' => 'If you did not request this password reset please email our support: :email',
'limit_users' => 'Sorry, this will exceed the limit of '.MAX_NUM_USERS.' users', 'limit_users' => 'Sorry, this will exceed the limit of :limit users',
'more_designs_self_host_header' => 'Get 6 more invoice designs for just $'.INVOICE_DESIGNS_PRICE, 'more_designs_self_host_header' => 'Get 6 more invoice designs for just $:price',
'old_browser' => 'Please use a <a href="'.OUTDATE_BROWSER_URL.'" target="_blank">newer browser</a>', 'old_browser' => 'Please use a <a href=":link" target="_blank">newer browser</a>',
'white_label_custom_css' => ':link for $'.WHITE_LABEL_PRICE.' to enable custom styling and help support our project.', 'white_label_custom_css' => ':link for $:price to enable custom styling and help support our project.',
'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href="'.OFX_HOME_URL.'" target="_blank">400+ US banks.</a>', 'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href=":link" target="_blank">400+ US banks.</a>',
'security' => [
'too_many_attempts' => 'Too many attempts. Try again in few minutes.', 'pro_plan_remove_logo' => ':link to remove the Invoice Ninja logo by joining the Pro Plan',
'wrong_credentials' => 'Incorrect email or password.', 'pro_plan_remove_logo_link' => 'Click here',
'confirmation' => 'Your account has been confirmed!', 'invitation_status_sent' => 'Email Sent',
'wrong_confirmation' => 'Wrong confirmation code.', 'invitation_status_opened' => 'Email Openend',
'password_forgot' => 'The information regarding password reset was sent to your email.', 'invitation_status_viewed' => 'Invoice Viewed',
'password_reset' => 'Your password has been changed successfully.', 'email_error_inactive_client' => 'Emails can not be sent to inactive clients',
'wrong_password_reset' => 'Invalid password. Try again', 'email_error_inactive_contact' => 'Emails can not be sent to inactive contacts',
], 'email_error_inactive_invoice' => 'Emails can not be sent to inactive invoices',
'pro_plan' => [ 'email_error_user_unregistered' => 'Please register your account to send emails',
'remove_logo' => ':link to remove the Invoice Ninja logo by joining the Pro Plan', 'email_error_user_unconfirmed' => 'Please confirm your account to send emails',
'remove_logo_link' => 'Click here', 'email_error_invalid_contact_email' => 'Invalid contact email',
],
'invitation_status' => [
'sent' => 'Email Sent',
'opened' => 'Email Openend',
'viewed' => 'Invoice Viewed',
],
'email_errors' => [
'inactive_client' => 'Emails can not be sent to inactive clients',
'inactive_contact' => 'Emails can not be sent to inactive contacts',
'inactive_invoice' => 'Emails can not be sent to inactive invoices',
'user_unregistered' => 'Please register your account to send emails',
'user_unconfirmed' => 'Please confirm your account to send emails',
'invalid_contact_email' => 'Invalid contact email',
],
'navigation' => 'Navigation', 'navigation' => 'Navigation',
'list_invoices' => 'List Invoices', 'list_invoices' => 'List Invoices',

View File

@ -256,7 +256,7 @@ return array(
'email_salutation' => 'Estimado :name,', 'email_salutation' => 'Estimado :name,',
'email_signature' => 'Un saludo cordial,', 'email_signature' => 'Un saludo cordial,',
'email_from' => 'El equipo de Invoice Ninja ', 'email_from' => 'El equipo de Invoice Ninja ',
'user_email_footer' => 'Para ajustar la configuración de las notificaciones de tu correo, visita '.SITE_URL.'/settings/notifications', 'user_email_footer' => 'Para ajustar la configuración de las notificaciones de tu correo, visita :link',
'invoice_link_message' => 'Para visualizar la factura de cliente, haz clic en el enlace abajo:', 'invoice_link_message' => 'Para visualizar la factura de cliente, haz clic en el enlace abajo:',
'notification_invoice_paid_subject' => 'La factura :invoice ha sido pagada por el cliente :client', 'notification_invoice_paid_subject' => 'La factura :invoice ha sido pagada por el cliente :client',
'notification_invoice_sent_subject' => 'La factura :invoice ha sido enviada a el cliente :client', 'notification_invoice_sent_subject' => 'La factura :invoice ha sido enviada a el cliente :client',
@ -265,7 +265,7 @@ return array(
'notification_invoice_sent' => 'La factura :invoice por valor de :amount fue enviada al cliente :cliente.', 'notification_invoice_sent' => 'La factura :invoice por valor de :amount fue enviada al cliente :cliente.',
'notification_invoice_viewed' => 'La factura :invoice por valor de :amount fue visualizada por el cliente :client.', 'notification_invoice_viewed' => 'La factura :invoice por valor de :amount fue visualizada por el cliente :client.',
'reset_password' => 'Puedes reconfigurar la contraseña de tu cuenta haciendo clic en el siguiente enlace:', 'reset_password' => 'Puedes reconfigurar la contraseña de tu cuenta haciendo clic en el siguiente enlace:',
'reset_password_footer' => 'Si no has solicitado un cambio de contraseña, por favor contactate con nosostros: '.CONTACT_EMAIL, 'reset_password_footer' => 'Si no has solicitado un cambio de contraseña, por favor contactate con nosostros: :email',
// Payment page // Payment page
'secure_payment' => 'Pago seguro', 'secure_payment' => 'Pago seguro',
@ -274,22 +274,10 @@ return array(
'expiration_year' => 'Año de caducidad', 'expiration_year' => 'Año de caducidad',
'cvv' => 'CVV', 'cvv' => 'CVV',
// Security alerts
'security' => array(
'too_many_attempts' => 'Demasiados intentos fallidos. Inténtalo de nuevo en un par de minutos.',
'wrong_credentials' => 'Contraseña o correo incorrecto.',
'confirmation' => '¡Tu cuenta se ha confirmado!',
'wrong_confirmation' => 'Código de confirmación incorrecto.',
'password_forgot' => 'La información sobre el cambio de tu contraseña se ha enviado a tu dirección de correo electrónico.',
'password_reset' => 'Tu contraseña se ha cambiado con éxito.',
'wrong_password_reset' => 'Contraseña no válida. Inténtalo de nuevo',
),
// Pro Plan // Pro Plan
'pro_plan' => [ 'pro_plan_remove_logo' => ':link haz click para eliminar el logo de Invoice Ninja', //Maybe incorrect for the context
'remove_logo' => ':link haz click para eliminar el logo de Invoice Ninja', //Maybe incorrect for the context 'pro_plan_remove_logo_link' => 'Haz clic aquí',
'remove_logo_link' => 'Haz clic aquí',
],
'logout' => 'Cerrar sesión', 'logout' => 'Cerrar sesión',
'sign_up_to_save' => 'Registrate para guardar tu trabajo', 'sign_up_to_save' => 'Registrate para guardar tu trabajo',
'agree_to_terms' => 'Estoy de acuerdo con los términos de Invoice Ninja :terms', 'agree_to_terms' => 'Estoy de acuerdo con los términos de Invoice Ninja :terms',
@ -396,7 +384,7 @@ return array(
'active' => 'Activar', 'active' => 'Activar',
'pending' => 'Pendiente', 'pending' => 'Pendiente',
'deleted_user' => 'Usario eliminado con éxito', 'deleted_user' => 'Usario eliminado con éxito',
'limit_users' => 'Lo sentimos, esta acción excederá el límite de '.MAX_NUM_USERS.' usarios', 'limit_users' => 'Lo sentimos, esta acción excederá el límite de :limit usarios',
'confirm_email_invoice' => '¿Estás seguro que quieres enviar esta factura?', 'confirm_email_invoice' => '¿Estás seguro que quieres enviar esta factura?',
'confirm_email_quote' => '¿Estás seguro que quieres enviar esta cotización?', 'confirm_email_quote' => '¿Estás seguro que quieres enviar esta cotización?',
'confirm_recurring_email_invoice' => 'Se ha marcado esta factura como recurrente, estás seguro que quieres enviar esta factura?', 'confirm_recurring_email_invoice' => 'Se ha marcado esta factura como recurrente, estás seguro que quieres enviar esta factura?',
@ -426,7 +414,7 @@ return array(
'more_designs_title' => 'Diseños Adicionales de Facturas', 'more_designs_title' => 'Diseños Adicionales de Facturas',
'more_designs_cloud_header' => 'Vete Pro para más diseños de facturas', 'more_designs_cloud_header' => 'Vete Pro para más diseños de facturas',
'more_designs_cloud_text' => '', 'more_designs_cloud_text' => '',
'more_designs_self_host_header' => 'Adquiera 6 diseños adicionales de facturas por solo $'.INVOICE_DESIGNS_PRICE, 'more_designs_self_host_header' => 'Adquiera 6 diseños adicionales de facturas por solo $:price',
'more_designs_self_host_text' => '', 'more_designs_self_host_text' => '',
'buy' => 'Comprar', 'buy' => 'Comprar',
'bought_designs' => 'Diseños adicionales de facturas agregados con éxito', 'bought_designs' => 'Diseños adicionales de facturas agregados con éxito',
@ -682,7 +670,7 @@ return array(
'email_error' => 'Hubo un problema enviando el correo', 'email_error' => 'Hubo un problema enviando el correo',
'confirm_recurring_timing' => 'Nota: los correos son enviados al inicio de la hora.', 'confirm_recurring_timing' => 'Nota: los correos son enviados al inicio de la hora.',
'old_browser' => 'Por favor utiliza <a href="'.OUTDATE_BROWSER_URL.'" target="_blank">más reciente</a>', 'old_browser' => 'Por favor utiliza <a href=":link" target="_blank">más reciente</a>',
'payment_terms_help' => 'Asigna la fecha de vencimiento por defecto de la factura', 'payment_terms_help' => 'Asigna la fecha de vencimiento por defecto de la factura',
'unlink_account' => 'Desconectar Cuenta', 'unlink_account' => 'Desconectar Cuenta',
'unlink' => 'Desconectar', 'unlink' => 'Desconectar',
@ -778,11 +766,10 @@ return array(
'invoice_quote_number' => 'Números de Cotización y Factura', 'invoice_quote_number' => 'Números de Cotización y Factura',
'invoice_charges' => 'Cargos de Factura', 'invoice_charges' => 'Cargos de Factura',
'invitation_status' => [ 'invitation_status_sent' => 'Correo enviado',
'sent' => 'Correo enviado', 'invitation_status_opened' => 'Correo Abierto',
'opened' => 'Correo Abierto', 'invitation_status_viewed' => 'Factura Vista',
'viewed' => 'Factura Vista',
],
'notification_invoice_bounced' => 'No nos fue posible entregar la Factura :invoice a :contact.', 'notification_invoice_bounced' => 'No nos fue posible entregar la Factura :invoice a :contact.',
'notification_invoice_bounced_subject' => 'No fue posible entregar la Factura :invoice', 'notification_invoice_bounced_subject' => 'No fue posible entregar la Factura :invoice',
'notification_quote_bounced' => 'No nos fue posible entregar la Cotización :invoice a :contact.', 'notification_quote_bounced' => 'No nos fue posible entregar la Cotización :invoice a :contact.',
@ -904,14 +891,12 @@ return array(
'no_mapper' => 'No valid mapping for file', 'no_mapper' => 'No valid mapping for file',
'invalid_csv_header' => 'Invalid CSV Header', 'invalid_csv_header' => 'Invalid CSV Header',
'email_errors' => [ 'email_error_inactive_client' => 'Emails can not be sent to inactive clients',
'inactive_client' => 'Emails can not be sent to inactive clients', 'email_error_inactive_contact' => 'Emails can not be sent to inactive contacts',
'inactive_contact' => 'Emails can not be sent to inactive contacts', 'email_error_inactive_invoice' => 'Emails can not be sent to inactive invoices',
'inactive_invoice' => 'Emails can not be sent to inactive invoices', 'email_error_user_unregistered' => 'Please register your account to send emails',
'user_unregistered' => 'Please register your account to send emails', 'email_error_user_unconfirmed' => 'Please confirm your account to send emails',
'user_unconfirmed' => 'Please confirm your account to send emails', 'email_error_invalid_contact_email' => 'Invalid contact email',
'invalid_contact_email' => 'Invalid contact email',
],
'client_portal' => 'Client Portal', 'client_portal' => 'Client Portal',
'admin' => 'Admin', 'admin' => 'Admin',
@ -964,7 +949,7 @@ return array(
'schedule' => 'Schedule', 'schedule' => 'Schedule',
'email_designs' => 'Email Designs', 'email_designs' => 'Email Designs',
'assigned_when_sent' => 'Assigned when sent', 'assigned_when_sent' => 'Assigned when sent',
'white_label_custom_css' => ':link for $'.WHITE_LABEL_PRICE.' to enable custom styling and help support our project.', 'white_label_custom_css' => ':link for $:price to enable custom styling and help support our project.',
'white_label_purchase_link' => 'Purchase a white label license', 'white_label_purchase_link' => 'Purchase a white label license',
// Expense / vendor // Expense / vendor
@ -1071,7 +1056,7 @@ return array(
'archived_bank_account' => 'Successfully archived bank account', 'archived_bank_account' => 'Successfully archived bank account',
'created_bank_account' => 'Successfully created bank account', 'created_bank_account' => 'Successfully created bank account',
'validate_bank_account' => 'Validate Bank Account', 'validate_bank_account' => 'Validate Bank Account',
'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href="'.OFX_HOME_URL.'" target="_blank">400+ US banks.</a>', 'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href=":link" target="_blank">400+ US banks.</a>',
'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.', 'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.',
'bank_password_warning' => 'Warning: your password may be transmitted in plain text, consider enabling HTTPS.', 'bank_password_warning' => 'Warning: your password may be transmitted in plain text, consider enabling HTTPS.',
'username' => 'Username', 'username' => 'Username',
@ -1106,7 +1091,7 @@ return array(
'trial_call_to_action' => 'Start Free Trial', 'trial_call_to_action' => 'Start Free Trial',
'trial_success' => 'Successfully enabled two week free pro plan trial', 'trial_success' => 'Successfully enabled two week free pro plan trial',
'overdue' => 'Overdue', 'overdue' => 'Overdue',
'white_label_text' => 'Purchase a ONE YEAR white label license for $'.WHITE_LABEL_PRICE.' to remove the Invoice Ninja branding from the client portal and help support our project.', 'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding from the client portal and help support our project.',
'navigation' => 'Navigation', 'navigation' => 'Navigation',
'list_invoices' => 'List Invoices', 'list_invoices' => 'List Invoices',
@ -1137,14 +1122,14 @@ return array(
'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.', 'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.',
'send_portal_password'=>'Generate password automatically', 'send_portal_password'=>'Generate password automatically',
'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.', 'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.',
'expired' => 'Expired', 'expired' => 'Expired',
'invalid_card_number' => 'The credit card number is not valid.', 'invalid_card_number' => 'The credit card number is not valid.',
'invalid_expiry' => 'The expiration date is not valid.', 'invalid_expiry' => 'The expiration date is not valid.',
'invalid_cvv' => 'The CVV is not valid.', 'invalid_cvv' => 'The CVV is not valid.',
'cost' => 'Cost', 'cost' => 'Cost',
'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.', 'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.',
// User Permissions // User Permissions
'owner' => 'Owner', 'owner' => 'Owner',
'administrator' => 'Administrator', 'administrator' => 'Administrator',
@ -1162,8 +1147,8 @@ return array(
'create_all_help' => 'Allow user to create and modify records', 'create_all_help' => 'Allow user to create and modify records',
'view_all_help' => 'Allow user to view records they didn\'t create', 'view_all_help' => 'Allow user to view records they didn\'t create',
'edit_all_help' => 'Allow user to modify records they didn\'t create', 'edit_all_help' => 'Allow user to modify records they didn\'t create',
'view_payment' => 'View Payment', 'view_payment' => 'View Payment',
'january' => 'January', 'january' => 'January',
'february' => 'February', 'february' => 'February',
'march' => 'March', 'march' => 'March',
@ -1189,17 +1174,15 @@ return array(
'document_email_attachment' => 'Attach Documents', 'document_email_attachment' => 'Attach Documents',
'download_documents' => 'Download Documents (:size)', 'download_documents' => 'Download Documents (:size)',
'documents_from_expenses' => 'From Expenses:', 'documents_from_expenses' => 'From Expenses:',
'dropzone' => array(// See http://www.dropzonejs.com/#config-dictDefaultMessage 'dropzone_default_message' => 'Drop files or click to upload',
'DefaultMessage' => 'Drop files or click to upload', 'dropzone_fallback_message' => 'Your browser does not support drag\'n\'drop file uploads.',
'FallbackMessage' => 'Your browser does not support drag\'n\'drop file uploads.', 'dropzone_fallback_text' => 'Please use the fallback form below to upload your files like in the olden days.',
'FallbackText' => 'Please use the fallback form below to upload your files like in the olden days.', 'dropzone_file_too_big' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.',
'FileTooBig' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.', 'dropzone_invalid_file_type' => 'You can\'t upload files of this type.',
'InvalidFileType' => 'You can\'t upload files of this type.', 'dropzone_response_error' => 'Server responded with {{statusCode}} code.',
'ResponseError' => 'Server responded with {{statusCode}} code.', 'dropzone_cancel_upload' => 'Cancel upload',
'CancelUpload' => 'Cancel upload', 'dropzone_cancel_upload_confirmation' => 'Are you sure you want to cancel this upload?',
'CancelUploadConfirmation' => 'Are you sure you want to cancel this upload?', 'dropzone_remove_file' => 'Remove file',
'RemoveFile' => 'Remove file',
),
'documents' => 'Documents', 'documents' => 'Documents',
'document_date' => 'Document Date', 'document_date' => 'Document Date',
'document_size' => 'Size', 'document_size' => 'Size',
@ -1208,11 +1191,11 @@ return array(
'enable_client_portal_help' => 'Show/hide the client portal.', 'enable_client_portal_help' => 'Show/hide the client portal.',
'enable_client_portal_dashboard' => 'Dashboard', 'enable_client_portal_dashboard' => 'Dashboard',
'enable_client_portal_dashboard_help' => 'Show/hide the dashboard page in the client portal.', 'enable_client_portal_dashboard_help' => 'Show/hide the dashboard page in the client portal.',
// Plans // Plans
'account_management' => 'Account Management', 'account_management' => 'Account Management',
'plan_status' => 'Plan Status', 'plan_status' => 'Plan Status',
'plan_upgrade' => 'Upgrade', 'plan_upgrade' => 'Upgrade',
'plan_change' => 'Change Plan', 'plan_change' => 'Change Plan',
'pending_change_to' => 'Changes To', 'pending_change_to' => 'Changes To',
@ -1242,9 +1225,9 @@ return array(
'plan_paid' => 'Term Started', 'plan_paid' => 'Term Started',
'plan_started' => 'Plan Started', 'plan_started' => 'Plan Started',
'plan_expires' => 'Plan Expires', 'plan_expires' => 'Plan Expires',
'white_label_button' => 'White Label', 'white_label_button' => 'White Label',
'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.',
'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.',
'enterprise_plan_product' => 'Enterprise Plan', 'enterprise_plan_product' => 'Enterprise Plan',
@ -1264,5 +1247,5 @@ return array(
'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.', 'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.',
'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.', 'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.',
'return_to_app' => 'Return to app', 'return_to_app' => 'Return to app',
); );

View File

@ -271,7 +271,7 @@ return array(
'email_salutation' => 'Estimado :name,', 'email_salutation' => 'Estimado :name,',
'email_signature' => 'Un cordial saludo,', 'email_signature' => 'Un cordial saludo,',
'email_from' => 'El equipo de Invoice Ninja ', 'email_from' => 'El equipo de Invoice Ninja ',
'user_email_footer' => 'Para ajustar la configuración de las notificaciones de tu email, visita '.SITE_URL.'/settings/notifications', 'user_email_footer' => 'Para ajustar la configuración de las notificaciones de tu email, visita :link',
'invoice_link_message' => 'Para visualizar la factura de cliente, haz clic en el enlace de abajo:', 'invoice_link_message' => 'Para visualizar la factura de cliente, haz clic en el enlace de abajo:',
'notification_invoice_paid_subject' => 'La factura :invoice ha sido pagada por el cliente :client', 'notification_invoice_paid_subject' => 'La factura :invoice ha sido pagada por el cliente :client',
'notification_invoice_sent_subject' => 'La factura :invoice ha sido enviada a el cliente :client', 'notification_invoice_sent_subject' => 'La factura :invoice ha sido enviada a el cliente :client',
@ -280,7 +280,7 @@ return array(
'notification_invoice_sent' => 'La factura :invoice por importe de :amount fue enviada al cliente :cliente.', 'notification_invoice_sent' => 'La factura :invoice por importe de :amount fue enviada al cliente :cliente.',
'notification_invoice_viewed' => 'La factura :invoice por importe de :amount fue visualizada por el cliente :client.', 'notification_invoice_viewed' => 'La factura :invoice por importe de :amount fue visualizada por el cliente :client.',
'reset_password' => 'Puedes reconfigurar la contraseña de tu cuenta haciendo clic en el siguiente enlace:', 'reset_password' => 'Puedes reconfigurar la contraseña de tu cuenta haciendo clic en el siguiente enlace:',
'reset_password_footer' => 'Si no has solicitado un cambio de contraseña, por favor contactate con nosostros: '.CONTACT_EMAIL, 'reset_password_footer' => 'Si no has solicitado un cambio de contraseña, por favor contactate con nosostros: :email',
// Payment page // Payment page
'secure_payment' => 'Pago seguro', 'secure_payment' => 'Pago seguro',
@ -289,22 +289,10 @@ return array(
'expiration_year' => 'Año de caducidad', 'expiration_year' => 'Año de caducidad',
'cvv' => 'CVV', 'cvv' => 'CVV',
// Security alerts
'confide' => array(
'too_many_attempts' => 'Demasiados intentos fallidos. Inténtalo de nuevo en un par de minutos.',
'wrong_credentials' => 'Contraseña o email incorrecto.',
'confirmation' => '¡Tu cuenta se ha confirmado!',
'wrong_confirmation' => 'Código de confirmación incorrecto.',
'password_forgot' => 'La información sobre el cambio de tu contraseña se ha enviado a tu dirección de correo electrónico.',
'password_reset' => 'Tu contraseña se ha cambiado con éxito.',
'wrong_password_reset' => 'Contraseña no válida. Inténtalo de nuevo',
),
// Pro Plan // Pro Plan
'pro_plan' => [ 'pro_plan_remove_logo' => ':link haz click para eliminar el logo de Invoice Ninja',
'remove_logo' => ':link haz click para eliminar el logo de Invoice Ninja', 'pro_plan_remove_logo_link' => 'Haz click aquí',
'remove_logo_link' => 'Haz click aquí',
],
'logout' => 'Cerrar sesión', 'logout' => 'Cerrar sesión',
'sign_up_to_save' => 'Registrate para guardar tu trabajo', 'sign_up_to_save' => 'Registrate para guardar tu trabajo',
'agree_to_terms' => 'Estoy de acuerdo con los términos de Invoice Ninja :terms', 'agree_to_terms' => 'Estoy de acuerdo con los términos de Invoice Ninja :terms',
@ -414,7 +402,7 @@ return array(
'active' => 'Activo', 'active' => 'Activo',
'pending' => 'Pendiente', 'pending' => 'Pendiente',
'deleted_user' => 'Usario eliminado con éxito', 'deleted_user' => 'Usario eliminado con éxito',
'limit_users' => 'Lo sentimos, esta acción excederá el límite de '.MAX_NUM_USERS.' usarios', 'limit_users' => 'Lo sentimos, esta acción excederá el límite de :limit usarios',
'confirm_email_invoice' => '¿Estás seguro que quieres enviar esta factura?', 'confirm_email_invoice' => '¿Estás seguro que quieres enviar esta factura?',
'confirm_email_quote' => '¿Estás seguro que quieres enviar este presupuesto?', 'confirm_email_quote' => '¿Estás seguro que quieres enviar este presupuesto?',
'confirm_recurring_email_invoice' => 'Se ha marcado esta factura como recurrente, estás seguro que quieres enviar esta factura?', 'confirm_recurring_email_invoice' => 'Se ha marcado esta factura como recurrente, estás seguro que quieres enviar esta factura?',
@ -444,7 +432,7 @@ return array(
'more_designs_title' => 'Diseños adicionales para factura', 'more_designs_title' => 'Diseños adicionales para factura',
'more_designs_cloud_header' => 'Pase a Pro para añadir más diseños de facturas', 'more_designs_cloud_header' => 'Pase a Pro para añadir más diseños de facturas',
'more_designs_cloud_text' => '', 'more_designs_cloud_text' => '',
'more_designs_self_host_header' => 'Obtenga 6 diseños más para facturas por sólo '.INVOICE_DESIGNS_PRICE, // comprobar 'more_designs_self_host_header' => 'Obtenga 6 diseños más para facturas por sólo $:price', // comprobar
'more_designs_self_host_text' => '', 'more_designs_self_host_text' => '',
'buy' => 'Comprar', 'buy' => 'Comprar',
'bought_designs' => 'Añadidos con exito los diseños de factura', 'bought_designs' => 'Añadidos con exito los diseños de factura',
@ -702,7 +690,7 @@ return array(
'email_error' => 'Ocurrió un problema enviando el correo', 'email_error' => 'Ocurrió un problema enviando el correo',
'confirm_recurring_timing' => 'Nota: correos enviados cada hora en punto.', 'confirm_recurring_timing' => 'Nota: correos enviados cada hora en punto.',
'old_browser' => 'Por favor use un <a href="'.OUTDATE_BROWSER_URL.'" target="_blank">navegador mas actual</a>', 'old_browser' => 'Por favor use un <a href=":link" target="_blank">navegador mas actual</a>',
'payment_terms_help' => 'Establezca la fecha de pago de factura por defecto', 'payment_terms_help' => 'Establezca la fecha de pago de factura por defecto',
'unlink_account' => 'Cuenta desvinculada', 'unlink_account' => 'Cuenta desvinculada',
'unlink' => 'Desvincular', 'unlink' => 'Desvincular',
@ -799,11 +787,10 @@ return array(
'invoice_quote_number' => 'Números de Factura y Presupuesto', 'invoice_quote_number' => 'Números de Factura y Presupuesto',
'invoice_charges' => 'Cargos de factura', 'invoice_charges' => 'Cargos de factura',
'invitation_status' => [ 'invitation_status_sent' => 'Correo Enviado',
'sent' => 'Correo Enviado', 'invitation_status_opened' => 'Correo abierto',
'opened' => 'Correo abierto', 'invitation_status_viewed' => 'Factura vista',
'viewed' => 'Factura vista',
],
'notification_invoice_bounced' => 'No podemos entregar la factura :invoice a :contact.', 'notification_invoice_bounced' => 'No podemos entregar la factura :invoice a :contact.',
'notification_invoice_bounced_subject' => 'No se puede entregar la factura :invoice', 'notification_invoice_bounced_subject' => 'No se puede entregar la factura :invoice',
'notification_quote_bounced' => 'No podemos entregar el presupuesto :invoice a :contact.', 'notification_quote_bounced' => 'No podemos entregar el presupuesto :invoice a :contact.',
@ -924,14 +911,12 @@ return array(
'no_mapper' => 'Mapeo no válido para el fichero', 'no_mapper' => 'Mapeo no válido para el fichero',
'invalid_csv_header' => 'Cabecera CSV no Válida', 'invalid_csv_header' => 'Cabecera CSV no Válida',
'email_errors' => [ 'email_error_inactive_client' => 'No se pueden enviar correos a Clientes inactivos',
'inactive_client' => 'No se pueden enviar correos a Clientes inactivos', 'email_error_inactive_contact' => 'No se pueden enviar correos a Contactos inactivos',
'inactive_contact' => 'No se pueden enviar correos a Contactos inactivos', 'email_error_inactive_invoice' => 'No se pueden enviar correos de Facturas inactivas',
'inactive_invoice' => 'No se pueden enviar correos de Facturas inactivas', 'email_error_user_unregistered' => 'Por favor registra tu cuenta para enviar correos',
'user_unregistered' => 'Por favor registra tu cuenta para enviar correos', 'email_error_user_unconfirmed' => 'Por favor confirma tu cuenta para enviar correos',
'user_unconfirmed' => 'Por favor confirma tu cuenta para enviar correos', 'email_error_invalid_contact_email' => 'Correo de contacto no válido',
'invalid_contact_email' => 'Correo de contacto no válido',
],
'client_portal' => 'Portal Cliente', 'client_portal' => 'Portal Cliente',
'admin' => 'Admin.', 'admin' => 'Admin.',
@ -985,7 +970,7 @@ return array(
'email_designs' => 'Diseños de correo', 'email_designs' => 'Diseños de correo',
'assigned_when_sent' => 'Asignado al enviar', 'assigned_when_sent' => 'Asignado al enviar',
'white_label_custom_css' => ':link para $'.WHITE_LABEL_PRICE.' to enable custom styling and help support our project.', 'white_label_custom_css' => ':link para $:price to enable custom styling and help support our project.',
'white_label_purchase_link' => 'Comprar licencia de marca blanca', 'white_label_purchase_link' => 'Comprar licencia de marca blanca',
// Expense / vendor // Expense / vendor
@ -1091,7 +1076,7 @@ return array(
'archived_bank_account' => 'Cuenta Bancaria archivada correctamente', 'archived_bank_account' => 'Cuenta Bancaria archivada correctamente',
'created_bank_account' => 'Cuenta Bancaria creada correctamente', 'created_bank_account' => 'Cuenta Bancaria creada correctamente',
'validate_bank_account' => 'Validar Cuenta Bancaria', 'validate_bank_account' => 'Validar Cuenta Bancaria',
'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href="'.OFX_HOME_URL.'" target="_blank">400+ US banks.</a>', 'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href=":link" target="_blank">400+ US banks.</a>',
'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.', 'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.',
'bank_password_warning' => 'Warning: your password may be transmitted in plain text, consider enabling HTTPS.', 'bank_password_warning' => 'Warning: your password may be transmitted in plain text, consider enabling HTTPS.',
'username' => 'Usuario', 'username' => 'Usuario',
@ -1126,7 +1111,7 @@ return array(
'trial_call_to_action' => 'Start Free Trial', 'trial_call_to_action' => 'Start Free Trial',
'trial_success' => 'Successfully enabled two week free pro plan trial', 'trial_success' => 'Successfully enabled two week free pro plan trial',
'overdue' => 'Overdue', 'overdue' => 'Overdue',
'white_label_text' => 'Purchase a ONE YEAR white label license for $'.WHITE_LABEL_PRICE.' to remove the Invoice Ninja branding from the client portal and help support our project.', 'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding from the client portal and help support our project.',
'navigation' => 'Navigation', 'navigation' => 'Navigation',
'list_invoices' => 'List Invoices', 'list_invoices' => 'List Invoices',
@ -1157,14 +1142,14 @@ return array(
'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.', 'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.',
'send_portal_password'=>'Generate password automatically', 'send_portal_password'=>'Generate password automatically',
'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.', 'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.',
'expired' => 'Expired', 'expired' => 'Expired',
'invalid_card_number' => 'The credit card number is not valid.', 'invalid_card_number' => 'The credit card number is not valid.',
'invalid_expiry' => 'The expiration date is not valid.', 'invalid_expiry' => 'The expiration date is not valid.',
'invalid_cvv' => 'The CVV is not valid.', 'invalid_cvv' => 'The CVV is not valid.',
'cost' => 'Cost', 'cost' => 'Cost',
'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.', 'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.',
// User Permissions // User Permissions
'owner' => 'Owner', 'owner' => 'Owner',
'administrator' => 'Administrator', 'administrator' => 'Administrator',
@ -1182,8 +1167,8 @@ return array(
'create_all_help' => 'Allow user to create and modify records', 'create_all_help' => 'Allow user to create and modify records',
'view_all_help' => 'Allow user to view records they didn\'t create', 'view_all_help' => 'Allow user to view records they didn\'t create',
'edit_all_help' => 'Allow user to modify records they didn\'t create', 'edit_all_help' => 'Allow user to modify records they didn\'t create',
'view_payment' => 'View Payment', 'view_payment' => 'View Payment',
'january' => 'January', 'january' => 'January',
'february' => 'February', 'february' => 'February',
'march' => 'March', 'march' => 'March',
@ -1209,17 +1194,15 @@ return array(
'document_email_attachment' => 'Attach Documents', 'document_email_attachment' => 'Attach Documents',
'download_documents' => 'Download Documents (:size)', 'download_documents' => 'Download Documents (:size)',
'documents_from_expenses' => 'From Expenses:', 'documents_from_expenses' => 'From Expenses:',
'dropzone' => array(// See http://www.dropzonejs.com/#config-dictDefaultMessage 'dropzone_default_message' => 'Drop files or click to upload',
'DefaultMessage' => 'Drop files or click to upload', 'dropzone_fallback_message' => 'Your browser does not support drag\'n\'drop file uploads.',
'FallbackMessage' => 'Your browser does not support drag\'n\'drop file uploads.', 'dropzone_fallback_text' => 'Please use the fallback form below to upload your files like in the olden days.',
'FallbackText' => 'Please use the fallback form below to upload your files like in the olden days.', 'dropzone_file_too_big' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.',
'FileTooBig' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.', 'dropzone_invalid_file_type' => 'You can\'t upload files of this type.',
'InvalidFileType' => 'You can\'t upload files of this type.', 'dropzone_response_error' => 'Server responded with {{statusCode}} code.',
'ResponseError' => 'Server responded with {{statusCode}} code.', 'dropzone_cancel_upload' => 'Cancel upload',
'CancelUpload' => 'Cancel upload', 'dropzone_cancel_upload_confirmation' => 'Are you sure you want to cancel this upload?',
'CancelUploadConfirmation' => 'Are you sure you want to cancel this upload?', 'dropzone_remove_file' => 'Remove file',
'RemoveFile' => 'Remove file',
),
'documents' => 'Documents', 'documents' => 'Documents',
'document_date' => 'Document Date', 'document_date' => 'Document Date',
'document_size' => 'Size', 'document_size' => 'Size',
@ -1228,11 +1211,11 @@ return array(
'enable_client_portal_help' => 'Show/hide the client portal.', 'enable_client_portal_help' => 'Show/hide the client portal.',
'enable_client_portal_dashboard' => 'Dashboard', 'enable_client_portal_dashboard' => 'Dashboard',
'enable_client_portal_dashboard_help' => 'Show/hide the dashboard page in the client portal.', 'enable_client_portal_dashboard_help' => 'Show/hide the dashboard page in the client portal.',
// Plans // Plans
'account_management' => 'Account Management', 'account_management' => 'Account Management',
'plan_status' => 'Plan Status', 'plan_status' => 'Plan Status',
'plan_upgrade' => 'Upgrade', 'plan_upgrade' => 'Upgrade',
'plan_change' => 'Change Plan', 'plan_change' => 'Change Plan',
'pending_change_to' => 'Changes To', 'pending_change_to' => 'Changes To',
@ -1262,9 +1245,9 @@ return array(
'plan_paid' => 'Term Started', 'plan_paid' => 'Term Started',
'plan_started' => 'Plan Started', 'plan_started' => 'Plan Started',
'plan_expires' => 'Plan Expires', 'plan_expires' => 'Plan Expires',
'white_label_button' => 'White Label', 'white_label_button' => 'White Label',
'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.',
'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.',
'enterprise_plan_product' => 'Enterprise Plan', 'enterprise_plan_product' => 'Enterprise Plan',
@ -1284,5 +1267,5 @@ return array(
'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.', 'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.',
'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.', 'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.',
'return_to_app' => 'Return to app', 'return_to_app' => 'Return to app',
); );

View File

@ -262,7 +262,7 @@ return array(
'email_salutation' => 'Cher :name,', 'email_salutation' => 'Cher :name,',
'email_signature' => 'Cordialement,', 'email_signature' => 'Cordialement,',
'email_from' => 'L\'équipe Invoice Ninja', 'email_from' => 'L\'équipe Invoice Ninja',
'user_email_footer' => 'Pour modifier vos paramètres de notification par courriel, veuillez visiter '.SITE_URL.'/settings/notifications', 'user_email_footer' => 'Pour modifier vos paramètres de notification par courriel, veuillez visiter :link',
'invoice_link_message' => 'Pour voir la facture de votre client cliquez sur le lien ci-après :', 'invoice_link_message' => 'Pour voir la facture de votre client cliquez sur le lien ci-après :',
'notification_invoice_paid_subject' => 'La facture :invoice a été payée par le client :client', 'notification_invoice_paid_subject' => 'La facture :invoice a été payée par le client :client',
'notification_invoice_sent_subject' => 'La facture :invoice a été envoyée au client :client', 'notification_invoice_sent_subject' => 'La facture :invoice a été envoyée au client :client',
@ -271,7 +271,7 @@ return array(
'notification_invoice_sent' => 'Le client suivant :client a reçu par courriel la facture :invoice d\'un montant de :amount', 'notification_invoice_sent' => 'Le client suivant :client a reçu par courriel la facture :invoice d\'un montant de :amount',
'notification_invoice_viewed' => 'Le client suivant :client a vu la facture :invoice d\'un montant de :amount', 'notification_invoice_viewed' => 'Le client suivant :client a vu la facture :invoice d\'un montant de :amount',
'reset_password' => 'Vous pouvez réinitialiser votre mot de passe en cliquant sur le lien suivant :', 'reset_password' => 'Vous pouvez réinitialiser votre mot de passe en cliquant sur le lien suivant :',
'reset_password_footer' => 'Si vous n\'avez pas effectué de demande de réinitalisation de mot de passe veuillez contacter notre support :'.CONTACT_EMAIL, 'reset_password_footer' => 'Si vous n\'avez pas effectué de demande de réinitalisation de mot de passe veuillez contacter notre support : :email',
// Payment page // Payment page
'secure_payment' => 'Paiement sécurisé', 'secure_payment' => 'Paiement sécurisé',
@ -280,22 +280,9 @@ return array(
'expiration_year' => 'Année d\'expiration', 'expiration_year' => 'Année d\'expiration',
'cvv' => 'Cryptogramme visuel', 'cvv' => 'Cryptogramme visuel',
// Security alerts
'security' => array(
'too_many_attempts' => 'Trop de tentatives. Essayez à nouveau dans quelques minutes.',
'wrong_credentials' => 'Courriel ou mot de passe incorrect',
'confirmation' => 'Votre compte a été validé !',
'wrong_confirmation' => 'Code de confirmation incorrect.',
'password_forgot' => 'Les informations de réinitialisation de votre mot de passe vous ont été envoyées par courriel.',
'password_reset' => 'Votre mot de passe a été modifié avec succès.',
'wrong_password_reset' => 'Mot de passe incorrect. Veuillez réessayer',
),
// Pro Plan // Pro Plan
'pro_plan' => [ 'pro_plan_remove_logo' => ':link pour supprimer le logo Invoice Ninja en souscrivant au Plan Pro',
'remove_logo' => ':link pour supprimer le logo Invoice Ninja en souscrivant au Plan Pro', 'pro_plan_remove_logo_link' => 'Cliquez ici',
'remove_logo_link' => 'Cliquez ici',
],
'logout' => 'Se déconnecter', 'logout' => 'Se déconnecter',
'sign_up_to_save' => 'Connectez vous pour sauvegarder votre travail', 'sign_up_to_save' => 'Connectez vous pour sauvegarder votre travail',
@ -412,7 +399,7 @@ return array(
'active' => 'Actif', 'active' => 'Actif',
'pending' => 'En attente', 'pending' => 'En attente',
'deleted_user' => 'Utilisateur supprimé', 'deleted_user' => 'Utilisateur supprimé',
'limit_users' => 'Désolé, ceci excédera la limite de '.MAX_NUM_USERS.' utilisateurs', 'limit_users' => 'Désolé, ceci excédera la limite de :limit utilisateurs',
'confirm_email_invoice' => 'Voulez-vous vraiment envoyer cette facture par courriel ?', 'confirm_email_invoice' => 'Voulez-vous vraiment envoyer cette facture par courriel ?',
'confirm_email_quote' => 'Voulez-vous vraiment envoyer ce devis par courriel ?', 'confirm_email_quote' => 'Voulez-vous vraiment envoyer ce devis par courriel ?',
@ -446,7 +433,7 @@ return array(
'more_designs_title' => 'Modèles de factures additionnels', 'more_designs_title' => 'Modèles de factures additionnels',
'more_designs_cloud_header' => 'Passez au Plan Pro pour plus de modèles', 'more_designs_cloud_header' => 'Passez au Plan Pro pour plus de modèles',
'more_designs_cloud_text' => '', 'more_designs_cloud_text' => '',
'more_designs_self_host_header' => 'Obtenez 6 modèles de factures additionnels pour seulement '.INVOICE_DESIGNS_PRICE.'$', 'more_designs_self_host_header' => 'Obtenez 6 modèles de factures additionnels pour seulement $:price',
'more_designs_self_host_text' => '', 'more_designs_self_host_text' => '',
'buy' => 'Acheter', 'buy' => 'Acheter',
'bought_designs' => 'Les nouveaux modèles ont été ajoutés avec succès', 'bought_designs' => 'Les nouveaux modèles ont été ajoutés avec succès',
@ -695,7 +682,7 @@ return array(
'email_error' => 'Il y a eu un problème en envoyant le courriel', 'email_error' => 'Il y a eu un problème en envoyant le courriel',
'confirm_recurring_timing' => 'Note : les courriels sont envoyés au début de l\'heure.', 'confirm_recurring_timing' => 'Note : les courriels sont envoyés au début de l\'heure.',
'old_browser' => 'Merci d\'utiliser un <a href="'.OUTDATE_BROWSER_URL.'" target="_blank">navigateur plus récent</a>', 'old_browser' => 'Merci d\'utiliser un <a href=":link" target="_blank">navigateur plus récent</a>',
'payment_terms_help' => 'Définir la date d\'échéance par défaut de la facture', 'payment_terms_help' => 'Définir la date d\'échéance par défaut de la facture',
'unlink_account' => 'Dissocier le compte', 'unlink_account' => 'Dissocier le compte',
'unlink' => 'Dissocier', 'unlink' => 'Dissocier',
@ -791,11 +778,10 @@ return array(
'invoice_quote_number' => 'Numéro des devis & factures', 'invoice_quote_number' => 'Numéro des devis & factures',
'invoice_charges' => 'Charges de facturation', 'invoice_charges' => 'Charges de facturation',
'invitation_status' => [ 'invitation_status_sent' => 'Email envoyé',
'sent' => 'Email envoyé', 'invitation_status_opened' => 'Email ouvert',
'opened' => 'Email ouvert', 'invitation_status_viewed' => 'Facture vue',
'viewed' => 'Facture vue',
],
'notification_invoice_bounced' => 'We were unable to deliver Invoice :invoice to :contact.', 'notification_invoice_bounced' => 'We were unable to deliver Invoice :invoice to :contact.',
'notification_invoice_bounced_subject' => 'Unable to deliver Invoice :invoice', 'notification_invoice_bounced_subject' => 'Unable to deliver Invoice :invoice',
'notification_quote_bounced' => 'We were unable to deliver Quote :invoice to :contact.', 'notification_quote_bounced' => 'We were unable to deliver Quote :invoice to :contact.',
@ -918,14 +904,12 @@ return array(
'no_mapper' => 'Mappage invalide pour ce fichier', 'no_mapper' => 'Mappage invalide pour ce fichier',
'invalid_csv_header' => 'En-tête du fichier CSV invalide', 'invalid_csv_header' => 'En-tête du fichier CSV invalide',
'email_errors' => [ 'email_error_inactive_client' => 'Les mails ne peuvent être envoyés aux clients inactifs',
'inactive_client' => 'Les mails ne peuvent être envoyés aux clients inactifs', 'email_error_inactive_contact' => 'Les mails ne peuvent être envoyés aux contacts inactifs',
'inactive_contact' => 'Les mails ne peuvent être envoyés aux contacts inactifs', 'email_error_inactive_invoice' => 'Les mails ne peuvent être envoyés aux factures inactives',
'inactive_invoice' => 'Les mails ne peuvent être envoyés aux factures inactives', 'email_error_user_unregistered' => 'Veuillez vous inscrire afin d\'envoyer des mails',
'user_unregistered' => 'Veuillez vous inscrire afin d\'envoyer des mails', 'email_error_user_unconfirmed' => 'Veuillez confirmer votre compte afin de permettre l\'envoi de mail',
'user_unconfirmed' => 'Veuillez confirmer votre compte afin de permettre l\'envoi de mail', 'email_error_invalid_contact_email' => 'Adresse mail du contact invalide',
'invalid_contact_email' => 'Adresse mail du contact invalide',
],
'client_portal' => 'Portail client', 'client_portal' => 'Portail client',
'admin' => 'Admin', 'admin' => 'Admin',
@ -979,7 +963,7 @@ return array(
'email_designs' => 'Email Designs', 'email_designs' => 'Email Designs',
'assigned_when_sent' => 'Assigned when sent', 'assigned_when_sent' => 'Assigned when sent',
'white_label_custom_css' => ':link for $'.WHITE_LABEL_PRICE.' to enable custom styling and help support our project.', 'white_label_custom_css' => ':link for $:price to enable custom styling and help support our project.',
'white_label_purchase_link' => 'Acheter une licence marque blanche', 'white_label_purchase_link' => 'Acheter une licence marque blanche',
// Expense / vendor // Expense / vendor
@ -1086,7 +1070,7 @@ return array(
'archived_bank_account' => 'Compte bancaire archivé', 'archived_bank_account' => 'Compte bancaire archivé',
'created_bank_account' => 'Compte bancaire créé', 'created_bank_account' => 'Compte bancaire créé',
'validate_bank_account' => 'Valider le compte bancaire', 'validate_bank_account' => 'Valider le compte bancaire',
'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href="'.OFX_HOME_URL.'" target="_blank">400+ US banks.</a>', 'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href=":link" target="_blank">400+ US banks.</a>',
'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.', 'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.',
'bank_password_warning' => 'Attention: votre mot de passe peut être transmis en clair, pensez à activer HTTPS.', 'bank_password_warning' => 'Attention: votre mot de passe peut être transmis en clair, pensez à activer HTTPS.',
'username' => 'Nom d\'utilisateur', 'username' => 'Nom d\'utilisateur',
@ -1121,7 +1105,7 @@ return array(
'trial_call_to_action' => 'Commencer l\'essai gratuit', 'trial_call_to_action' => 'Commencer l\'essai gratuit',
'trial_success' => 'Successfully enabled two week free pro plan trial', 'trial_success' => 'Successfully enabled two week free pro plan trial',
'overdue' => 'Impayé', 'overdue' => 'Impayé',
'white_label_text' => 'Purchase a ONE YEAR white label license for $'.WHITE_LABEL_PRICE.' to remove the Invoice Ninja branding from the client portal and help support our project.', 'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding from the client portal and help support our project.',
'navigation' => 'Navigation', 'navigation' => 'Navigation',
'list_invoices' => 'Liste des factures', 'list_invoices' => 'Liste des factures',
@ -1152,14 +1136,14 @@ return array(
'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.', 'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.',
'send_portal_password'=>'Générer un mot de passe automatiquement', 'send_portal_password'=>'Générer un mot de passe automatiquement',
'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.', 'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.',
'expired' => 'Expiré', 'expired' => 'Expiré',
'invalid_card_number' => 'Le numéro de carte bancaire est invalide.', 'invalid_card_number' => 'Le numéro de carte bancaire est invalide.',
'invalid_expiry' => 'La date d\'expiration est invalide.', 'invalid_expiry' => 'La date d\'expiration est invalide.',
'invalid_cvv' => 'Le code de sécurité est incorrect.', 'invalid_cvv' => 'Le code de sécurité est incorrect.',
'cost' => 'Coût', 'cost' => 'Coût',
'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.', 'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.',
// User Permissions // User Permissions
'owner' => 'Propriétaire', 'owner' => 'Propriétaire',
'administrator' => 'Administrateur', 'administrator' => 'Administrateur',
@ -1177,8 +1161,8 @@ return array(
'create_all_help' => 'Autoriser l\'utilisateur à créer et éditer tous les enregistrements', 'create_all_help' => 'Autoriser l\'utilisateur à créer et éditer tous les enregistrements',
'view_all_help' => 'Allow user to view records they didn\'t create', 'view_all_help' => 'Allow user to view records they didn\'t create',
'edit_all_help' => 'Allow user to modify records they didn\'t create', 'edit_all_help' => 'Allow user to modify records they didn\'t create',
'view_payment' => 'Voir le paiement', 'view_payment' => 'Voir le paiement',
'january' => 'Janvier', 'january' => 'Janvier',
'february' => 'Février', 'february' => 'Février',
'march' => 'Mars', 'march' => 'Mars',
@ -1204,17 +1188,15 @@ return array(
'document_email_attachment' => 'Attach Documents', 'document_email_attachment' => 'Attach Documents',
'download_documents' => 'Download Documents (:size)', 'download_documents' => 'Download Documents (:size)',
'documents_from_expenses' => 'From Expenses:', 'documents_from_expenses' => 'From Expenses:',
'dropzone' => array(// See http://www.dropzonejs.com/#config-dictDefaultMessage 'dropzone_default_message' => 'Drop files or click to upload',
'DefaultMessage' => 'Drop files or click to upload', 'dropzone_fallback_message' => 'Your browser does not support drag\'n\'drop file uploads.',
'FallbackMessage' => 'Your browser does not support drag\'n\'drop file uploads.', 'dropzone_fallback_text' => 'Please use the fallback form below to upload your files like in the olden days.',
'FallbackText' => 'Please use the fallback form below to upload your files like in the olden days.', 'dropzone_file_too_big' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.',
'FileTooBig' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.', 'dropzone_invalid_file_type' => 'You can\'t upload files of this type.',
'InvalidFileType' => 'You can\'t upload files of this type.', 'dropzone_response_error' => 'Server responded with {{statusCode}} code.',
'ResponseError' => 'Server responded with {{statusCode}} code.', 'dropzone_cancel_upload' => 'Cancel upload',
'CancelUpload' => 'Cancel upload', 'dropzone_cancel_upload_confirmation' => 'Are you sure you want to cancel this upload?',
'CancelUploadConfirmation' => 'Are you sure you want to cancel this upload?', 'dropzone_remove_file' => 'Remove file',
'RemoveFile' => 'Remove file',
),
'documents' => 'Documents', 'documents' => 'Documents',
'document_date' => 'Document Date', 'document_date' => 'Document Date',
'document_size' => 'Size', 'document_size' => 'Size',
@ -1223,11 +1205,11 @@ return array(
'enable_client_portal_help' => 'Show/hide the client portal.', 'enable_client_portal_help' => 'Show/hide the client portal.',
'enable_client_portal_dashboard' => 'Dashboard', 'enable_client_portal_dashboard' => 'Dashboard',
'enable_client_portal_dashboard_help' => 'Show/hide the dashboard page in the client portal.', 'enable_client_portal_dashboard_help' => 'Show/hide the dashboard page in the client portal.',
// Plans // Plans
'account_management' => 'Account Management', 'account_management' => 'Account Management',
'plan_status' => 'Plan Status', 'plan_status' => 'Plan Status',
'plan_upgrade' => 'Upgrade', 'plan_upgrade' => 'Upgrade',
'plan_change' => 'Change Plan', 'plan_change' => 'Change Plan',
'pending_change_to' => 'Changes To', 'pending_change_to' => 'Changes To',
@ -1257,9 +1239,9 @@ return array(
'plan_paid' => 'Term Started', 'plan_paid' => 'Term Started',
'plan_started' => 'Plan Started', 'plan_started' => 'Plan Started',
'plan_expires' => 'Plan Expires', 'plan_expires' => 'Plan Expires',
'white_label_button' => 'White Label', 'white_label_button' => 'White Label',
'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.',
'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.',
'enterprise_plan_product' => 'Enterprise Plan', 'enterprise_plan_product' => 'Enterprise Plan',
@ -1279,5 +1261,5 @@ return array(
'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.', 'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.',
'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.', 'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.',
'return_to_app' => 'Return to app', 'return_to_app' => 'Return to app',
); );

View File

@ -262,7 +262,7 @@ return array(
'email_salutation' => 'Cher :name,', 'email_salutation' => 'Cher :name,',
'email_signature' => 'Cordialement,', 'email_signature' => 'Cordialement,',
'email_from' => 'L\'équipe Invoice Ninja', 'email_from' => 'L\'équipe Invoice Ninja',
'user_email_footer' => 'Pour modifier vos paramètres de notification par courriel, veuillez visiter '.SITE_URL.'/settings/notifications', 'user_email_footer' => 'Pour modifier vos paramètres de notification par courriel, veuillez visiter :link',
'invoice_link_message' => 'Pour voir la facture de votre client cliquez sur le lien ci-après :', 'invoice_link_message' => 'Pour voir la facture de votre client cliquez sur le lien ci-après :',
'notification_invoice_paid_subject' => 'La facture :invoice a été payée par le client :client', 'notification_invoice_paid_subject' => 'La facture :invoice a été payée par le client :client',
'notification_invoice_sent_subject' => 'La facture :invoice a été envoyée au client :client', 'notification_invoice_sent_subject' => 'La facture :invoice a été envoyée au client :client',
@ -271,7 +271,7 @@ return array(
'notification_invoice_sent' => 'Le client suivant :client a reçu par courriel la facture :invoice d\'un montant de :amount', 'notification_invoice_sent' => 'Le client suivant :client a reçu par courriel la facture :invoice d\'un montant de :amount',
'notification_invoice_viewed' => 'Le client suivant :client a vu la facture :invoice d\'un montant de :amount', 'notification_invoice_viewed' => 'Le client suivant :client a vu la facture :invoice d\'un montant de :amount',
'reset_password' => 'Vous pouvez réinitialiser votre mot de passe en cliquant sur le lien suivant :', 'reset_password' => 'Vous pouvez réinitialiser votre mot de passe en cliquant sur le lien suivant :',
'reset_password_footer' => 'Si vous n\'avez pas effectué de demande de réinitalisation de mot de passe veuillez contacter notre support :' . CONTACT_EMAIL, 'reset_password_footer' => 'Si vous n\'avez pas effectué de demande de réinitalisation de mot de passe veuillez contacter notre support : :email',
// Payment page // Payment page
'secure_payment' => 'Paiement sécurisé', 'secure_payment' => 'Paiement sécurisé',
@ -280,22 +280,9 @@ return array(
'expiration_year' => 'Année d\'expiration', 'expiration_year' => 'Année d\'expiration',
'cvv' => 'CVV', 'cvv' => 'CVV',
// Security alerts
'confide' => array(
'too_many_attempts' => 'Trop de tentatives. Veuillez réessayer dans quelques minutes.',
'wrong_credentials' => 'Courriel ou mot de passe incorrect',
'confirmation' => 'Votre compte a été validé !',
'wrong_confirmation' => 'Code de confirmation incorrect.',
'password_forgot' => 'Les informations de réinitialisation de votre mot de passe vous ont été envoyées par courriel.',
'password_reset' => 'Votre mot de passe a été modifié avec succès.',
'wrong_password_reset' => 'Mot de passe incorrect. Veuillez réessayer',
),
// Pro Plan // Pro Plan
'pro_plan' => [ 'pro_plan_remove_logo' => ':link pour supprimer le logo Invoice Ninja en souscrivant au plan pro',
'remove_logo' => ':link pour supprimer le logo Invoice Ninja en souscrivant au plan pro', 'pro_plan_remove_logo_link' => 'Cliquez ici',
'remove_logo_link' => 'Cliquez ici',
],
'logout' => 'Déconnexion', 'logout' => 'Déconnexion',
'sign_up_to_save' => 'Connectez-vous pour sauvegarder votre travail', 'sign_up_to_save' => 'Connectez-vous pour sauvegarder votre travail',
@ -412,7 +399,7 @@ return array(
'active' => 'Actif', 'active' => 'Actif',
'pending' => 'En attente', 'pending' => 'En attente',
'deleted_user' => 'Utilisateur supprimé', 'deleted_user' => 'Utilisateur supprimé',
'limit_users' => 'Désolé, ceci excédera la limite de ' . MAX_NUM_USERS . ' utilisateurs', 'limit_users' => 'Désolé, ceci excédera la limite de :limit utilisateurs',
'confirm_email_invoice' => 'Voulez-vous vraiment envoyer cette facture par courriel ?', 'confirm_email_invoice' => 'Voulez-vous vraiment envoyer cette facture par courriel ?',
'confirm_email_quote' => 'Voulez-vous vraiment envoyer cette soumission par courriel ?', 'confirm_email_quote' => 'Voulez-vous vraiment envoyer cette soumission par courriel ?',
@ -447,7 +434,7 @@ return array(
'more_designs_title' => 'Modèles de factures additionnels', 'more_designs_title' => 'Modèles de factures additionnels',
'more_designs_cloud_header' => 'Passez au Plan Pro pour obtenir plus de modèles', 'more_designs_cloud_header' => 'Passez au Plan Pro pour obtenir plus de modèles',
'more_designs_cloud_text' => '', 'more_designs_cloud_text' => '',
'more_designs_self_host_header' => 'Obtenez 6 modèles de factures additionnels pour seulement '.INVOICE_DESIGNS_PRICE.'$', 'more_designs_self_host_header' => 'Obtenez 6 modèles de factures additionnels pour seulement $:price',
'more_designs_self_host_text' => '', 'more_designs_self_host_text' => '',
'buy' => 'Acheter', 'buy' => 'Acheter',
'bought_designs' => 'Les nouveaux modèles ont été ajoutés avec succès', 'bought_designs' => 'Les nouveaux modèles ont été ajoutés avec succès',
@ -697,7 +684,7 @@ return array(
'email_error' => 'Il y a eu un problème avec l\'envoi du courriel', 'email_error' => 'Il y a eu un problème avec l\'envoi du courriel',
'confirm_recurring_timing' => 'Note: Les courriels sont envoyés au début de chaque heure.', 'confirm_recurring_timing' => 'Note: Les courriels sont envoyés au début de chaque heure.',
'old_browser' => 'Veuillez utiliser un <a href="'.OUTDATE_BROWSER_URL.'" target="_blank">navigateur plus récent</a>', 'old_browser' => 'Veuillez utiliser un <a href=":link" target="_blank">navigateur plus récent</a>',
'payment_terms_help' => 'Défini la date d\'échéance par défaut', 'payment_terms_help' => 'Défini la date d\'échéance par défaut',
'unlink_account' => 'Délié le compte', 'unlink_account' => 'Délié le compte',
'unlink' => 'Délié', 'unlink' => 'Délié',
@ -731,7 +718,7 @@ return array(
'recent_payments' => 'Paiements reçus', 'recent_payments' => 'Paiements reçus',
'outstanding' => 'Impayés', 'outstanding' => 'Impayés',
'manage_companies' => 'Gérer les entreprises', 'manage_companies' => 'Gérer les entreprises',
'total_revenue' => 'Revenus', 'total_revenue' => 'Revenus',
'current_user' => 'Utilisateur en cours', 'current_user' => 'Utilisateur en cours',
'new_recurring_invoice' => 'Nouvelle facture récurrente', 'new_recurring_invoice' => 'Nouvelle facture récurrente',
@ -794,11 +781,10 @@ return array(
'invoice_quote_number' => 'Numéros de factures et de soumissions', 'invoice_quote_number' => 'Numéros de factures et de soumissions',
'invoice_charges' => 'Frais de facturation', 'invoice_charges' => 'Frais de facturation',
'invitation_status' => [ 'invitation_status_sent' => 'Courriel envoyé',
'sent' => 'Courriel envoyé', 'invitation_status_opened' => 'Courriel ouvert',
'opened' => 'Courriel ouvert', 'invitation_status_viewed' => 'Facture consultée',
'viewed' => 'Facture consultée',
],
'notification_invoice_bounced' => 'Impossible d\'envoyer la facture :invoice à :contact.', 'notification_invoice_bounced' => 'Impossible d\'envoyer la facture :invoice à :contact.',
'notification_invoice_bounced_subject' => 'Impossible d\'envoyer la facture :invoice', 'notification_invoice_bounced_subject' => 'Impossible d\'envoyer la facture :invoice',
'notification_quote_bounced' => 'Impossible d\'envoyer la soumission :invoice à :contact.', 'notification_quote_bounced' => 'Impossible d\'envoyer la soumission :invoice à :contact.',
@ -919,14 +905,12 @@ return array(
'no_mapper' => 'Aucun liens de champs valides pour ce fichier', 'no_mapper' => 'Aucun liens de champs valides pour ce fichier',
'invalid_csv_header' => 'Entête CSV invalide', 'invalid_csv_header' => 'Entête CSV invalide',
'email_errors' => [ 'email_error_inactive_client' => 'Aucun courriel ne peut être envoyé à un client inactif',
'inactive_client' => 'Aucun courriel ne peut être envoyé à un client inactif', 'email_error_inactive_contact' => 'Aucun courriel ne peut être envoyé à un contact inactif',
'inactive_contact' => 'Aucun courriel ne peut être envoyé à un contact inactif', 'email_error_inactive_invoice' => 'Aucun courriel ne peut être envoyé à une facture inactive',
'inactive_invoice' => 'Aucun courriel ne peut être envoyé à une facture inactive', 'email_error_user_unregistered' => 'Veuillez vous créer un compte pour envoyer des courriels',
'user_unregistered' => 'Veuillez vous créer un compte pour envoyer des courriels', 'email_error_user_unconfirmed' => 'Veuillez confirmer votre compte pour pouvoir envoyer des courriels',
'user_unconfirmed' => 'Veuillez confirmer votre compte pour pouvoir envoyer des courriels', 'email_error_invalid_contact_email' => 'Ce courriel est invalide',
'invalid_contact_email' => 'Ce courriel est invalide',
],
'client_portal' => 'Portail client', 'client_portal' => 'Portail client',
'admin' => 'Admin', 'admin' => 'Admin',
@ -980,7 +964,7 @@ return array(
'email_designs' => 'Modèles de courriel', 'email_designs' => 'Modèles de courriel',
'assigned_when_sent' => 'Assignée lors de l\'envoi', 'assigned_when_sent' => 'Assignée lors de l\'envoi',
'white_label_custom_css' => ':link à $'.WHITE_LABEL_PRICE.' pour activer les styles personnalisés et supporter notre projet.', 'white_label_custom_css' => ':link à $:price pour activer les styles personnalisés et supporter notre projet.',
'white_label_purchase_link' => 'Achetez une licence sans pub', 'white_label_purchase_link' => 'Achetez une licence sans pub',
// Expense / vendor // Expense / vendor
@ -1084,7 +1068,7 @@ return array(
'archived_bank_account' => 'Le compte bancaire a été archivé', 'archived_bank_account' => 'Le compte bancaire a été archivé',
'created_bank_account' => 'Le compte bancaire a été créé', 'created_bank_account' => 'Le compte bancaire a été créé',
'validate_bank_account' => 'Valider le compte bancaire', 'validate_bank_account' => 'Valider le compte bancaire',
'bank_accounts_help' => 'Veuillez vous connecter à un compte bancaire pour importer automatiquement les dépenses et créer les fournisseurs. Supporte American Express et <a href="'.OFX_HOME_URL.'" target="_blank"> plus de 400 banques américaines.</a>', 'bank_accounts_help' => 'Veuillez vous connecter à un compte bancaire pour importer automatiquement les dépenses et créer les fournisseurs. Supporte American Express et <a href=":link" target="_blank"> plus de 400 banques américaines.</a>',
'bank_password_help' => 'Note: votre mot de passe est transmis de façon sécuritaire et n\'est jamais enregistré sur nos serveurs.', 'bank_password_help' => 'Note: votre mot de passe est transmis de façon sécuritaire et n\'est jamais enregistré sur nos serveurs.',
'bank_password_warning' => 'Avertissement: votre mot de passe pourrait être transmis sans cryptage, pensez à activer HTTPS.', 'bank_password_warning' => 'Avertissement: votre mot de passe pourrait être transmis sans cryptage, pensez à activer HTTPS.',
'username' => 'Nom d\'utilisateur', 'username' => 'Nom d\'utilisateur',
@ -1119,7 +1103,7 @@ return array(
'trial_call_to_action' => 'Démarrez votre essai gratuit', 'trial_call_to_action' => 'Démarrez votre essai gratuit',
'trial_success' => 'Le Plan Pro, version d\'essai gratuit pour 2 semaines a été activé', 'trial_success' => 'Le Plan Pro, version d\'essai gratuit pour 2 semaines a été activé',
'overdue' => 'En souffrance', 'overdue' => 'En souffrance',
'white_label_text' => 'Achetez une licence sans pub d\'un an à $'.WHITE_LABEL_PRICE.' pour retirer le logo de Invoice Ninja du portail client et supporter notre projet.', 'white_label_text' => 'Achetez une licence sans pub d\'un an à $:price pour retirer le logo de Invoice Ninja du portail client et supporter notre projet.',
'navigation' => 'Navigation', 'navigation' => 'Navigation',
'list_invoices' => 'List Invoices', 'list_invoices' => 'List Invoices',
@ -1150,14 +1134,14 @@ return array(
'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.', 'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.',
'send_portal_password'=>'Generate password automatically', 'send_portal_password'=>'Generate password automatically',
'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.', 'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.',
'expired' => 'Expired', 'expired' => 'Expired',
'invalid_card_number' => 'The credit card number is not valid.', 'invalid_card_number' => 'The credit card number is not valid.',
'invalid_expiry' => 'The expiration date is not valid.', 'invalid_expiry' => 'The expiration date is not valid.',
'invalid_cvv' => 'The CVV is not valid.', 'invalid_cvv' => 'The CVV is not valid.',
'cost' => 'Cost', 'cost' => 'Cost',
'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.', 'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.',
// User Permissions // User Permissions
'owner' => 'Owner', 'owner' => 'Owner',
'administrator' => 'Administrator', 'administrator' => 'Administrator',
@ -1175,8 +1159,8 @@ return array(
'create_all_help' => 'Allow user to create and modify records', 'create_all_help' => 'Allow user to create and modify records',
'view_all_help' => 'Allow user to view records they didn\'t create', 'view_all_help' => 'Allow user to view records they didn\'t create',
'edit_all_help' => 'Allow user to modify records they didn\'t create', 'edit_all_help' => 'Allow user to modify records they didn\'t create',
'view_payment' => 'View Payment', 'view_payment' => 'View Payment',
'january' => 'January', 'january' => 'January',
'february' => 'February', 'february' => 'February',
'march' => 'March', 'march' => 'March',
@ -1202,17 +1186,15 @@ return array(
'document_email_attachment' => 'Attach Documents', 'document_email_attachment' => 'Attach Documents',
'download_documents' => 'Download Documents (:size)', 'download_documents' => 'Download Documents (:size)',
'documents_from_expenses' => 'From Expenses:', 'documents_from_expenses' => 'From Expenses:',
'dropzone' => array(// See http://www.dropzonejs.com/#config-dictDefaultMessage 'dropzone_default_message' => 'Drop files or click to upload',
'DefaultMessage' => 'Drop files or click to upload', 'dropzone_fallback_message' => 'Your browser does not support drag\'n\'drop file uploads.',
'FallbackMessage' => 'Your browser does not support drag\'n\'drop file uploads.', 'dropzone_fallback_text' => 'Please use the fallback form below to upload your files like in the olden days.',
'FallbackText' => 'Please use the fallback form below to upload your files like in the olden days.', 'dropzone_file_too_big' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.',
'FileTooBig' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.', 'dropzone_invalid_file_type' => 'You can\'t upload files of this type.',
'InvalidFileType' => 'You can\'t upload files of this type.', 'dropzone_response_error' => 'Server responded with {{statusCode}} code.',
'ResponseError' => 'Server responded with {{statusCode}} code.', 'dropzone_cancel_upload' => 'Cancel upload',
'CancelUpload' => 'Cancel upload', 'dropzone_cancel_upload_confirmation' => 'Are you sure you want to cancel this upload?',
'CancelUploadConfirmation' => 'Are you sure you want to cancel this upload?', 'dropzone_remove_file' => 'Remove file',
'RemoveFile' => 'Remove file',
),
'documents' => 'Documents', 'documents' => 'Documents',
'document_date' => 'Document Date', 'document_date' => 'Document Date',
'document_size' => 'Size', 'document_size' => 'Size',
@ -1221,11 +1203,11 @@ return array(
'enable_client_portal_help' => 'Show/hide the client portal.', 'enable_client_portal_help' => 'Show/hide the client portal.',
'enable_client_portal_dashboard' => 'Dashboard', 'enable_client_portal_dashboard' => 'Dashboard',
'enable_client_portal_dashboard_help' => 'Show/hide the dashboard page in the client portal.', 'enable_client_portal_dashboard_help' => 'Show/hide the dashboard page in the client portal.',
// Plans // Plans
'account_management' => 'Account Management', 'account_management' => 'Account Management',
'plan_status' => 'Plan Status', 'plan_status' => 'Plan Status',
'plan_upgrade' => 'Upgrade', 'plan_upgrade' => 'Upgrade',
'plan_change' => 'Change Plan', 'plan_change' => 'Change Plan',
'pending_change_to' => 'Changes To', 'pending_change_to' => 'Changes To',
@ -1255,9 +1237,9 @@ return array(
'plan_paid' => 'Term Started', 'plan_paid' => 'Term Started',
'plan_started' => 'Plan Started', 'plan_started' => 'Plan Started',
'plan_expires' => 'Plan Expires', 'plan_expires' => 'Plan Expires',
'white_label_button' => 'White Label', 'white_label_button' => 'White Label',
'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.',
'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.',
'enterprise_plan_product' => 'Enterprise Plan', 'enterprise_plan_product' => 'Enterprise Plan',
@ -1277,6 +1259,6 @@ return array(
'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.', 'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.',
'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.', 'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.',
'return_to_app' => 'Return to app', 'return_to_app' => 'Return to app',
); );

View File

@ -1,4 +1,4 @@
<?php <?php
return array( return array(
@ -117,7 +117,7 @@ return array(
'billed_client' => 'Cliente fatturato', 'billed_client' => 'Cliente fatturato',
'billed_clients' => 'Clienti fatturati', 'billed_clients' => 'Clienti fatturati',
'active_client' => 'cliente attivo', 'active_client' => 'cliente attivo',
'active_clients' => 'clienti attivi', 'active_clients' => 'clienti attivi',
'invoices_past_due' => 'Fatture Scadute', /* Insoluti */ 'invoices_past_due' => 'Fatture Scadute', /* Insoluti */
'upcoming_invoices' => 'Prossime fatture', 'upcoming_invoices' => 'Prossime fatture',
'average_invoice' => 'Fattura media', 'average_invoice' => 'Fattura media',
@ -262,7 +262,7 @@ return array(
'email_salutation' => 'Caro :name,', 'email_salutation' => 'Caro :name,',
'email_signature' => 'Distinti saluti,', 'email_signature' => 'Distinti saluti,',
'email_from' => 'Il Team di InvoiceNinja', 'email_from' => 'Il Team di InvoiceNinja',
'user_email_footer' => 'Per modificare le impostazioni di notifiche via email per favore accedi a: '.SITE_URL.'/settings/notifications', 'user_email_footer' => 'Per modificare le impostazioni di notifiche via email per favore accedi a: :link',
'invoice_link_message' => 'Per visualizzare la tua fattura del cliente clicca sul link qui sotto:', 'invoice_link_message' => 'Per visualizzare la tua fattura del cliente clicca sul link qui sotto:',
'notification_invoice_paid_subject' => 'La fattura :invoice è stata pagata da :client', 'notification_invoice_paid_subject' => 'La fattura :invoice è stata pagata da :client',
'notification_invoice_sent_subject' => 'La fattura :invoice è stata inviata a :client', 'notification_invoice_sent_subject' => 'La fattura :invoice è stata inviata a :client',
@ -271,31 +271,18 @@ return array(
'notification_invoice_sent' => 'Al seguente cliente :client è stata inviata via email la fattura :invoice di :amount.', 'notification_invoice_sent' => 'Al seguente cliente :client è stata inviata via email la fattura :invoice di :amount.',
'notification_invoice_viewed' => 'Il seguente cliente :client ha visualizzato la fattura :invoice di :amount.', 'notification_invoice_viewed' => 'Il seguente cliente :client ha visualizzato la fattura :invoice di :amount.',
'reset_password' => 'Puoi resettare la password del tuo account cliccando sul link qui sotto:', 'reset_password' => 'Puoi resettare la password del tuo account cliccando sul link qui sotto:',
'reset_password_footer' => 'Se non sei stato tu a voler resettare la password per favore invia un\'email di assistenza a: ' . CONTACT_EMAIL, 'reset_password_footer' => 'Se non sei stato tu a voler resettare la password per favore invia un\'email di assistenza a: :email',
// Payment page // Payment page
'secure_payment' => 'Pagamento Sicuro', 'secure_payment' => 'Pagamento Sicuro',
'card_number' => 'Numero Carta', 'card_number' => 'Numero Carta',
'expiration_month' => 'Mese di Scadenza', 'expiration_month' => 'Mese di Scadenza',
'expiration_year' => 'Anno di Scadenza', 'expiration_year' => 'Anno di Scadenza',
'cvv' => 'CVV', 'cvv' => 'CVV',
// Security alerts
'security' => [
'too_many_attempts' => 'Troppi tentativi fatti. Riprova tra qualche minuto.',
'wrong_credentials' => 'Email o password non corretti.',
'confirmation' => 'Il tuo account è stato confermato!',
'wrong_confirmation' => 'Codice di verifica errato.',
'password_forgot' => 'I dati per resettare la tua password sono stati inviati alla tua email.',
'password_reset' => 'La tua password è stata cambiata con successo.',
'wrong_password_reset' => 'Password errata. Riprova',
],
// Pro Plan // Pro Plan
'pro_plan' => [ 'pro_plan_remove_logo' => ':link per rimuovere il logo di Invoice Ninja aderendo al programma pro',
'remove_logo' => ':link per rimuovere il logo di Invoice Ninja aderendo al programma pro', 'pro_plan_remove_logo_link' => 'Clicca qui',
'remove_logo_link' => 'Clicca qui',
],
'logout' => 'Log Out', /* Esci */ 'logout' => 'Log Out', /* Esci */
'sign_up_to_save' => 'Registrati per salvare il tuo lavoro', 'sign_up_to_save' => 'Registrati per salvare il tuo lavoro',
@ -387,7 +374,7 @@ return array(
'notification_quote_sent_subject' => 'Il preventivo :invoice è stato inviato a :client', 'notification_quote_sent_subject' => 'Il preventivo :invoice è stato inviato a :client',
'notification_quote_viewed_subject' => 'Il preventivo :invoice è stato visualizzato da :client', 'notification_quote_viewed_subject' => 'Il preventivo :invoice è stato visualizzato da :client',
'notification_quote_sent' => 'Al seguente cliente :client è stata inviato il preventivo :invoice per un importo di :amount.', 'notification_quote_sent' => 'Al seguente cliente :client è stata inviato il preventivo :invoice per un importo di :amount.',
'notification_quote_viewed' => 'Il seguente cliente :client ha visualizzato il preventivo :invoice di :amount.', 'notification_quote_viewed' => 'Il seguente cliente :client ha visualizzato il preventivo :invoice di :amount.',
'session_expired' => 'La vostra sessione è scaduta.', 'session_expired' => 'La vostra sessione è scaduta.',
@ -412,7 +399,7 @@ return array(
'active' => 'Active', 'active' => 'Active',
'pending' => 'Pending', 'pending' => 'Pending',
'deleted_user' => 'Successfully deleted user', 'deleted_user' => 'Successfully deleted user',
'limit_users' => 'Sorry, this will exceed the limit of ' . MAX_NUM_USERS . ' users', 'limit_users' => 'Sorry, this will exceed the limit of :limit users',
'confirm_email_invoice' => 'Are you sure you want to email this invoice?', 'confirm_email_invoice' => 'Are you sure you want to email this invoice?',
'confirm_email_quote' => 'Are you sure you want to email this quote?', 'confirm_email_quote' => 'Are you sure you want to email this quote?',
@ -435,7 +422,7 @@ return array(
'share_invoice_counter' => 'Share invoice counter', 'share_invoice_counter' => 'Share invoice counter',
'invoice_issued_to' => 'Invoice issued to', 'invoice_issued_to' => 'Invoice issued to',
'invalid_counter' => 'To prevent a possible conflict please set either an invoice or quote number prefix', 'invalid_counter' => 'To prevent a possible conflict please set either an invoice or quote number prefix',
'mark_sent' => 'Mark sent', 'mark_sent' => 'Mark sent',
'gateway_help_1' => ':link to sign up for Authorize.net.', 'gateway_help_1' => ':link to sign up for Authorize.net.',
@ -447,7 +434,7 @@ return array(
'more_designs_title' => 'Additional Invoice Designs', 'more_designs_title' => 'Additional Invoice Designs',
'more_designs_cloud_header' => 'Go Pro for more invoice designs', 'more_designs_cloud_header' => 'Go Pro for more invoice designs',
'more_designs_cloud_text' => '', 'more_designs_cloud_text' => '',
'more_designs_self_host_header' => 'Get 6 more invoice designs for just $'.INVOICE_DESIGNS_PRICE, 'more_designs_self_host_header' => 'Get 6 more invoice designs for just $:price',
'more_designs_self_host_text' => '', 'more_designs_self_host_text' => '',
'buy' => 'Buy', 'buy' => 'Buy',
'bought_designs' => 'Successfully added additional invoice designs', 'bought_designs' => 'Successfully added additional invoice designs',
@ -699,7 +686,7 @@ return array(
'email_error' => 'There was a problem sending the email', 'email_error' => 'There was a problem sending the email',
'confirm_recurring_timing' => 'Note: emails are sent at the start of the hour.', 'confirm_recurring_timing' => 'Note: emails are sent at the start of the hour.',
'old_browser' => 'Please use a <a href="'.OUTDATE_BROWSER_URL.'" target="_blank">newer browser</a>', 'old_browser' => 'Please use a <a href=":link" target="_blank">newer browser</a>',
'payment_terms_help' => 'Sets the default invoice due date', 'payment_terms_help' => 'Sets the default invoice due date',
'unlink_account' => 'Unlink Account', 'unlink_account' => 'Unlink Account',
'unlink' => 'Unlink', 'unlink' => 'Unlink',
@ -796,11 +783,10 @@ return array(
'invoice_quote_number' => 'Numerazione Fatture e Preventivi', 'invoice_quote_number' => 'Numerazione Fatture e Preventivi',
'invoice_charges' => 'Invoice Charges', 'invoice_charges' => 'Invoice Charges',
'invitation_status' => [ 'invitation_status_sent' => 'Email Sent',
'sent' => 'Email Sent', 'invitation_status_opened' => 'Email Openend',
'opened' => 'Email Openend', 'invitation_status_viewed' => 'Invoice Viewed',
'viewed' => 'Invoice Viewed',
],
'notification_invoice_bounced' => 'We were unable to deliver Invoice :invoice to :contact.', 'notification_invoice_bounced' => 'We were unable to deliver Invoice :invoice to :contact.',
'notification_invoice_bounced_subject' => 'Unable to deliver Invoice :invoice', 'notification_invoice_bounced_subject' => 'Unable to deliver Invoice :invoice',
'notification_quote_bounced' => 'We were unable to deliver Quote :invoice to :contact.', 'notification_quote_bounced' => 'We were unable to deliver Quote :invoice to :contact.',
@ -921,14 +907,12 @@ return array(
'no_mapper' => 'No valid mapping for file', 'no_mapper' => 'No valid mapping for file',
'invalid_csv_header' => 'Invalid CSV Header', 'invalid_csv_header' => 'Invalid CSV Header',
'email_errors' => [ 'email_error_inactive_client' => 'Emails can not be sent to inactive clients',
'inactive_client' => 'Emails can not be sent to inactive clients', 'email_error_inactive_contact' => 'Emails can not be sent to inactive contacts',
'inactive_contact' => 'Emails can not be sent to inactive contacts', 'email_error_inactive_invoice' => 'Emails can not be sent to inactive invoices',
'inactive_invoice' => 'Emails can not be sent to inactive invoices', 'email_error_user_unregistered' => 'Please register your account to send emails',
'user_unregistered' => 'Please register your account to send emails', 'email_error_user_unconfirmed' => 'Please confirm your account to send emails',
'user_unconfirmed' => 'Please confirm your account to send emails', 'email_error_invalid_contact_email' => 'Invalid contact email',
'invalid_contact_email' => 'Invalid contact email',
],
'client_portal' => 'Client Portal', 'client_portal' => 'Client Portal',
'admin' => 'Admin', 'admin' => 'Admin',
@ -982,7 +966,7 @@ return array(
'email_designs' => 'Email Designs', 'email_designs' => 'Email Designs',
'assigned_when_sent' => 'Assigned when sent', 'assigned_when_sent' => 'Assigned when sent',
'white_label_custom_css' => ':link for $'.WHITE_LABEL_PRICE.' to enable custom styling and help support our project.', 'white_label_custom_css' => ':link for $:price to enable custom styling and help support our project.',
'white_label_purchase_link' => 'Purchase a white label license', 'white_label_purchase_link' => 'Purchase a white label license',
// Expense / vendor // Expense / vendor
@ -1089,7 +1073,7 @@ return array(
'archived_bank_account' => 'Successfully archived bank account', 'archived_bank_account' => 'Successfully archived bank account',
'created_bank_account' => 'Successfully created bank account', 'created_bank_account' => 'Successfully created bank account',
'validate_bank_account' => 'Validate Bank Account', 'validate_bank_account' => 'Validate Bank Account',
'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href="'.OFX_HOME_URL.'" target="_blank">400+ US banks.</a>', 'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href=":link" target="_blank">400+ US banks.</a>',
'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.', 'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.',
'bank_password_warning' => 'Warning: your password may be transmitted in plain text, consider enabling HTTPS.', 'bank_password_warning' => 'Warning: your password may be transmitted in plain text, consider enabling HTTPS.',
'username' => 'Username', 'username' => 'Username',
@ -1124,7 +1108,7 @@ return array(
'trial_call_to_action' => 'Start Free Trial', 'trial_call_to_action' => 'Start Free Trial',
'trial_success' => 'Successfully enabled two week free pro plan trial', 'trial_success' => 'Successfully enabled two week free pro plan trial',
'overdue' => 'Overdue', 'overdue' => 'Overdue',
'white_label_text' => 'Purchase a ONE YEAR white label license for $'.WHITE_LABEL_PRICE.' to remove the Invoice Ninja branding from the client portal and help support our project.', 'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding from the client portal and help support our project.',
'navigation' => 'Navigation', 'navigation' => 'Navigation',
'list_invoices' => 'List Invoices', 'list_invoices' => 'List Invoices',
@ -1155,14 +1139,14 @@ return array(
'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.', 'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.',
'send_portal_password'=>'Generate password automatically', 'send_portal_password'=>'Generate password automatically',
'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.', 'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.',
'expired' => 'Expired', 'expired' => 'Expired',
'invalid_card_number' => 'The credit card number is not valid.', 'invalid_card_number' => 'The credit card number is not valid.',
'invalid_expiry' => 'The expiration date is not valid.', 'invalid_expiry' => 'The expiration date is not valid.',
'invalid_cvv' => 'The CVV is not valid.', 'invalid_cvv' => 'The CVV is not valid.',
'cost' => 'Cost', 'cost' => 'Cost',
'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.', 'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.',
// User Permissions // User Permissions
'owner' => 'Owner', 'owner' => 'Owner',
'administrator' => 'Administrator', 'administrator' => 'Administrator',
@ -1180,8 +1164,8 @@ return array(
'create_all_help' => 'Allow user to create and modify records', 'create_all_help' => 'Allow user to create and modify records',
'view_all_help' => 'Allow user to view records they didn\'t create', 'view_all_help' => 'Allow user to view records they didn\'t create',
'edit_all_help' => 'Allow user to modify records they didn\'t create', 'edit_all_help' => 'Allow user to modify records they didn\'t create',
'view_payment' => 'View Payment', 'view_payment' => 'View Payment',
'january' => 'Gennaio', 'january' => 'Gennaio',
'february' => 'Febbraio', 'february' => 'Febbraio',
'march' => 'Marzo', 'march' => 'Marzo',
@ -1207,17 +1191,15 @@ return array(
'document_email_attachment' => 'Attach Documents', 'document_email_attachment' => 'Attach Documents',
'download_documents' => 'Download Documents (:size)', 'download_documents' => 'Download Documents (:size)',
'documents_from_expenses' => 'From Expenses:', 'documents_from_expenses' => 'From Expenses:',
'dropzone' => array(// See http://www.dropzonejs.com/#config-dictDefaultMessage 'dropzone_default_message' => 'Drop files or click to upload',
'DefaultMessage' => 'Drop files or click to upload', 'dropzone_fallback_message' => 'Your browser does not support drag\'n\'drop file uploads.',
'FallbackMessage' => 'Your browser does not support drag\'n\'drop file uploads.', 'dropzone_fallback_text' => 'Please use the fallback form below to upload your files like in the olden days.',
'FallbackText' => 'Please use the fallback form below to upload your files like in the olden days.', 'dropzone_file_too_big' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.',
'FileTooBig' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.', 'dropzone_invalid_file_type' => 'You can\'t upload files of this type.',
'InvalidFileType' => 'You can\'t upload files of this type.', 'dropzone_response_error' => 'Server responded with {{statusCode}} code.',
'ResponseError' => 'Server responded with {{statusCode}} code.', 'dropzone_cancel_upload' => 'Cancel upload',
'CancelUpload' => 'Cancel upload', 'dropzone_cancel_upload_confirmation' => 'Are you sure you want to cancel this upload?',
'CancelUploadConfirmation' => 'Are you sure you want to cancel this upload?', 'dropzone_remove_file' => 'Remove file',
'RemoveFile' => 'Remove file',
),
'documents' => 'Documents', 'documents' => 'Documents',
'document_date' => 'Document Date', 'document_date' => 'Document Date',
'document_size' => 'Size', 'document_size' => 'Size',
@ -1226,11 +1208,11 @@ return array(
'enable_client_portal_help' => 'Show/hide the client portal.', 'enable_client_portal_help' => 'Show/hide the client portal.',
'enable_client_portal_dashboard' => 'Dashboard', 'enable_client_portal_dashboard' => 'Dashboard',
'enable_client_portal_dashboard_help' => 'Show/hide the dashboard page in the client portal.', 'enable_client_portal_dashboard_help' => 'Show/hide the dashboard page in the client portal.',
// Plans // Plans
'account_management' => 'Account Management', 'account_management' => 'Account Management',
'plan_status' => 'Plan Status', 'plan_status' => 'Plan Status',
'plan_upgrade' => 'Upgrade', 'plan_upgrade' => 'Upgrade',
'plan_change' => 'Change Plan', 'plan_change' => 'Change Plan',
'pending_change_to' => 'Changes To', 'pending_change_to' => 'Changes To',
@ -1260,9 +1242,9 @@ return array(
'plan_paid' => 'Term Started', 'plan_paid' => 'Term Started',
'plan_started' => 'Plan Started', 'plan_started' => 'Plan Started',
'plan_expires' => 'Plan Expires', 'plan_expires' => 'Plan Expires',
'white_label_button' => 'White Label', 'white_label_button' => 'White Label',
'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.',
'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.',
'enterprise_plan_product' => 'Enterprise Plan', 'enterprise_plan_product' => 'Enterprise Plan',
@ -1282,5 +1264,5 @@ return array(
'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.', 'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.',
'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.', 'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.',
'return_to_app' => 'Return to app', 'return_to_app' => 'Return to app',
); );

View File

@ -993,40 +993,26 @@ $LANG = array(
'overdue' => 'Overdue', 'overdue' => 'Overdue',
'white_label_text' => 'Purchase a ONE YEAR white label license for $'.WHITE_LABEL_PRICE.' to remove the Invoice Ninja branding from the client portal and help support our project.', 'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding from the client portal and help support our project.',
'user_email_footer' => 'To adjust your email notification settings please visit '.SITE_URL.'/settings/notifications', 'user_email_footer' => 'To adjust your email notification settings please visit :link',
'reset_password_footer' => 'If you did not request this password reset please email our support: '.CONTACT_EMAIL, 'reset_password_footer' => 'If you did not request this password reset please email our support: :email',
'limit_users' => 'Sorry, this will exceed the limit of '.MAX_NUM_USERS.' users', 'limit_users' => 'Sorry, this will exceed the limit of :limit users',
'more_designs_self_host_header' => 'Get 6 more invoice designs for just $'.INVOICE_DESIGNS_PRICE, 'more_designs_self_host_header' => 'Get 6 more invoice designs for just $:price',
'old_browser' => 'Please use a <a href="'.OUTDATE_BROWSER_URL.'" target="_blank">newer browser</a>', 'old_browser' => 'Please use a <a href=":link" target="_blank">newer browser</a>',
'white_label_custom_css' => ':link for $'.WHITE_LABEL_PRICE.' to enable custom styling and help support our project.', 'white_label_custom_css' => ':link for $:price to enable custom styling and help support our project.',
'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href="'.OFX_HOME_URL.'" target="_blank">400+ US banks.</a>', 'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href=":link" target="_blank">400+ US banks.</a>',
'security' => [
'too_many_attempts' => 'Too many attempts. Try again in few minutes.', 'pro_plan_remove_logo' => 'プロプランに加入して、Invoice Ninjaのロゴを消す。 :link',
'wrong_credentials' => 'メールアドレスもしくはパスワードが正しくありません。', 'pro_plan_remove_logo_link' => 'こちらをクリック',
'confirmation' => 'アカウントが確認されました!', 'invitation_status_sent' => 'メール送付済',
'wrong_confirmation' => '確認コードが違っています。', 'invitation_status_opened' => 'メール開封済',
'password_forgot' => 'The information regarding password reset was sent to your email.', 'invitation_status_viewed' => '請求書閲覧済',
'password_reset' => 'パスワードが変更されました。', 'email_error_inactive_client' => 'Emails can not be sent to inactive clients',
'wrong_password_reset' => 'パスワードが正しくありません。もう一度入力してください。', 'email_error_inactive_contact' => 'Emails can not be sent to inactive contacts',
], 'email_error_inactive_invoice' => 'Emails can not be sent to inactive invoices',
'pro_plan' => [ 'email_error_user_unregistered' => 'Please register your account to send emails',
'remove_logo' => 'プロプランに加入して、Invoice Ninjaのロゴを消す。 :link', 'email_error_user_unconfirmed' => 'Please confirm your account to send emails',
'remove_logo_link' => 'こちらをクリック', 'email_error_invalid_contact_email' => 'Invalid contact email',
],
'invitation_status' => [
'sent' => 'メール送付済',
'opened' => 'メール開封済',
'viewed' => '請求書閲覧済',
],
'email_errors' => [
'inactive_client' => 'Emails can not be sent to inactive clients',
'inactive_contact' => 'Emails can not be sent to inactive contacts',
'inactive_invoice' => 'Emails can not be sent to inactive invoices',
'user_unregistered' => 'Please register your account to send emails',
'user_unconfirmed' => 'Please confirm your account to send emails',
'invalid_contact_email' => 'Invalid contact email',
],
'navigation' => 'ナビゲーション', 'navigation' => 'ナビゲーション',
'list_invoices' => '請求書一覧', 'list_invoices' => '請求書一覧',
@ -1057,14 +1043,14 @@ $LANG = array(
'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.', 'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.',
'send_portal_password'=>'Generate password automatically', 'send_portal_password'=>'Generate password automatically',
'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.', 'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.',
'expired' => 'Expired', 'expired' => 'Expired',
'invalid_card_number' => 'The credit card number is not valid.', 'invalid_card_number' => 'The credit card number is not valid.',
'invalid_expiry' => 'The expiration date is not valid.', 'invalid_expiry' => 'The expiration date is not valid.',
'invalid_cvv' => 'The CVV is not valid.', 'invalid_cvv' => 'The CVV is not valid.',
'cost' => 'Cost', 'cost' => 'Cost',
'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.', 'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.',
// User Permissions // User Permissions
'owner' => 'Owner', 'owner' => 'Owner',
'administrator' => 'Administrator', 'administrator' => 'Administrator',
@ -1082,8 +1068,8 @@ $LANG = array(
'create_all_help' => 'Allow user to create and modify records', 'create_all_help' => 'Allow user to create and modify records',
'view_all_help' => 'Allow user to view records they didn\'t create', 'view_all_help' => 'Allow user to view records they didn\'t create',
'edit_all_help' => 'Allow user to modify records they didn\'t create', 'edit_all_help' => 'Allow user to modify records they didn\'t create',
'view_payment' => 'View Payment', 'view_payment' => 'View Payment',
'january' => 'January', 'january' => 'January',
'february' => 'February', 'february' => 'February',
'march' => 'March', 'march' => 'March',
@ -1109,17 +1095,15 @@ $LANG = array(
'document_email_attachment' => 'Attach Documents', 'document_email_attachment' => 'Attach Documents',
'download_documents' => 'Download Documents (:size)', 'download_documents' => 'Download Documents (:size)',
'documents_from_expenses' => 'From Expenses:', 'documents_from_expenses' => 'From Expenses:',
'dropzone' => array(// See http://www.dropzonejs.com/#config-dictDefaultMessage 'dropzone_default_message' => 'Drop files or click to upload',
'DefaultMessage' => 'Drop files or click to upload', 'dropzone_fallback_message' => 'Your browser does not support drag\'n\'drop file uploads.',
'FallbackMessage' => 'Your browser does not support drag\'n\'drop file uploads.', 'dropzone_fallback_text' => 'Please use the fallback form below to upload your files like in the olden days.',
'FallbackText' => 'Please use the fallback form below to upload your files like in the olden days.', 'dropzone_file_too_big' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.',
'FileTooBig' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.', 'dropzone_invalid_file_type' => 'You can\'t upload files of this type.',
'InvalidFileType' => 'You can\'t upload files of this type.', 'dropzone_response_error' => 'Server responded with {{statusCode}} code.',
'ResponseError' => 'Server responded with {{statusCode}} code.', 'dropzone_cancel_upload' => 'Cancel upload',
'CancelUpload' => 'Cancel upload', 'dropzone_cancel_upload_confirmation' => 'Are you sure you want to cancel this upload?',
'CancelUploadConfirmation' => 'Are you sure you want to cancel this upload?', 'dropzone_remove_file' => 'Remove file',
'RemoveFile' => 'Remove file',
),
'documents' => 'Documents', 'documents' => 'Documents',
'document_date' => 'Document Date', 'document_date' => 'Document Date',
'document_size' => 'Size', 'document_size' => 'Size',
@ -1128,11 +1112,11 @@ $LANG = array(
'enable_client_portal_help' => 'Show/hide the client portal.', 'enable_client_portal_help' => 'Show/hide the client portal.',
'enable_client_portal_dashboard' => 'Dashboard', 'enable_client_portal_dashboard' => 'Dashboard',
'enable_client_portal_dashboard_help' => 'Show/hide the dashboard page in the client portal.', 'enable_client_portal_dashboard_help' => 'Show/hide the dashboard page in the client portal.',
// Plans // Plans
'account_management' => 'Account Management', 'account_management' => 'Account Management',
'plan_status' => 'Plan Status', 'plan_status' => 'Plan Status',
'plan_upgrade' => 'Upgrade', 'plan_upgrade' => 'Upgrade',
'plan_change' => 'Change Plan', 'plan_change' => 'Change Plan',
'pending_change_to' => 'Changes To', 'pending_change_to' => 'Changes To',
@ -1162,9 +1146,9 @@ $LANG = array(
'plan_paid' => 'Term Started', 'plan_paid' => 'Term Started',
'plan_started' => 'Plan Started', 'plan_started' => 'Plan Started',
'plan_expires' => 'Plan Expires', 'plan_expires' => 'Plan Expires',
'white_label_button' => 'White Label', 'white_label_button' => 'White Label',
'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.',
'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.',
'enterprise_plan_product' => 'Enterprise Plan', 'enterprise_plan_product' => 'Enterprise Plan',
@ -1184,10 +1168,10 @@ $LANG = array(
'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.', 'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.',
'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.', 'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.',
'return_to_app' => 'Return to app', 'return_to_app' => 'Return to app',
); );
return $LANG; return $LANG;
?>. ?>.

View File

@ -1,4 +1,4 @@
<?php <?php
return array( return array(
@ -117,7 +117,7 @@ return array(
'billed_client' => 'billed client', 'billed_client' => 'billed client',
'billed_clients' => 'billed clients', 'billed_clients' => 'billed clients',
'active_client' => 'active client', 'active_client' => 'active client',
'active_clients' => 'active clients', 'active_clients' => 'active clients',
'invoices_past_due' => 'Invoices Past Due', 'invoices_past_due' => 'Invoices Past Due',
'upcoming_invoices' => 'Upcoming invoices', 'upcoming_invoices' => 'Upcoming invoices',
'average_invoice' => 'Average invoice', 'average_invoice' => 'Average invoice',
@ -262,41 +262,28 @@ return array(
'email_salutation' => 'Dear :name,', 'email_salutation' => 'Dear :name,',
'email_signature' => 'Regards,', 'email_signature' => 'Regards,',
'email_from' => 'The Invoice Ninja Team', 'email_from' => 'The Invoice Ninja Team',
'user_email_footer' => 'To adjust your email notification settings please visit '.SITE_URL.'/settings/notifications', 'user_email_footer' => 'To adjust your email notification settings please visit :link',
'invoice_link_message' => 'To view your client invoice click the link below:', 'invoice_link_message' => 'To view your client invoice click the link below:',
'notification_invoice_paid_subject' => 'Invoice :invoice was paid by :client', 'notification_invoice_paid_subject' => 'Invoice :invoice was paid by :client',
'notification_invoice_sent_subject' => 'Invoice :invoice was sent to :client', 'notification_invoice_sent_subject' => 'Invoice :invoice was sent to :client',
'notification_invoice_viewed_subject' => 'Invoice :invoice was viewed by :client', 'notification_invoice_viewed_subject' => 'Invoice :invoice was viewed by :client',
'notification_invoice_paid' => 'A payment of :amount was made by client :client towards Invoice :invoice.', 'notification_invoice_paid' => 'A payment of :amount was made by client :client towards Invoice :invoice.',
'notification_invoice_sent' => 'The following client :client was emailed Invoice :invoice for :amount.', 'notification_invoice_sent' => 'The following client :client was emailed Invoice :invoice for :amount.',
'notification_invoice_viewed' => 'The following client :client viewed Invoice :invoice for :amount.', 'notification_invoice_viewed' => 'The following client :client viewed Invoice :invoice for :amount.',
'reset_password' => 'You can reset your account password by clicking the following button:', 'reset_password' => 'You can reset your account password by clicking the following button:',
'reset_password_footer' => 'If you did not request this password reset please email our support: ' . CONTACT_EMAIL, 'reset_password_footer' => 'If you did not request this password reset please email our support: :email',
// Payment page // Payment page
'secure_payment' => 'Secure Payment', 'secure_payment' => 'Secure Payment',
'card_number' => 'Card number', 'card_number' => 'Card number',
'expiration_month' => 'Expiration month', 'expiration_month' => 'Expiration month',
'expiration_year' => 'Expiration year', 'expiration_year' => 'Expiration year',
'cvv' => 'CVV', 'cvv' => 'CVV',
// Security alerts
'security' => [
'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
'pro_plan' => [ 'pro_plan_remove_logo' => ':link to remove the Invoice Ninja logo by joining the Pro Plan',
'remove_logo' => ':link to remove the Invoice Ninja logo by joining the Pro Plan', 'pro_plan_remove_logo_link' => 'Click here',
'remove_logo_link' => 'Click here',
],
'logout' => 'Log Out', 'logout' => 'Log Out',
'sign_up_to_save' => 'Sign up to save your work', 'sign_up_to_save' => 'Sign up to save your work',
@ -312,11 +299,11 @@ return array(
'pro_plan_product' => 'Pro Plan', 'pro_plan_product' => 'Pro Plan',
'pro_plan_description' => 'One year enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_description' => 'One year enrollment in the Invoice Ninja Pro Plan.',
'pro_plan_success' => 'Thanks for choosing Invoice Ninja\'s Pro plan!<p/>&nbsp;<br/> 'pro_plan_success' => 'Thanks for choosing Invoice Ninja\'s Pro plan!<p/>&nbsp;<br/>
<b>Next Steps</b><p/>A payable invoice has been sent to the email <b>Next Steps</b><p/>A payable invoice has been sent to the email
address associated with your account. To unlock all of the awesome address associated with your account. To unlock all of the awesome
Pro features, please follow the instructions on the invoice to pay Pro features, please follow the instructions on the invoice to pay
for a year of Pro-level invoicing.<p/> for a year of Pro-level invoicing.<p/>
Can\'t find the invoice? Need further assistance? We\'re happy to help Can\'t find the invoice? Need further assistance? We\'re happy to help
-- email us at contact@invoiceninja.com', -- email us at contact@invoiceninja.com',
'unsaved_changes' => 'You have unsaved changes', 'unsaved_changes' => 'You have unsaved changes',
@ -342,7 +329,7 @@ return array(
'archive_product' => 'Archive Product', 'archive_product' => 'Archive Product',
'updated_product' => 'Successfully updated product', 'updated_product' => 'Successfully updated product',
'created_product' => 'Successfully created product', 'created_product' => 'Successfully created product',
'archived_product' => 'Successfully archived product', 'archived_product' => 'Successfully archived product',
'pro_plan_custom_fields' => ':link to enable custom fields by joining the Pro Plan', 'pro_plan_custom_fields' => ':link to enable custom fields by joining the Pro Plan',
'advanced_settings' => 'Advanced Settings', 'advanced_settings' => 'Advanced Settings',
@ -395,7 +382,7 @@ return array(
'notification_quote_sent_subject' => 'Quote :invoice was sent to :client', 'notification_quote_sent_subject' => 'Quote :invoice was sent to :client',
'notification_quote_viewed_subject' => 'Quote :invoice was viewed by :client', 'notification_quote_viewed_subject' => 'Quote :invoice was viewed by :client',
'notification_quote_sent' => 'The following client :client was emailed Quote :invoice for :amount.', 'notification_quote_sent' => 'The following client :client was emailed Quote :invoice for :amount.',
'notification_quote_viewed' => 'The following client :client viewed Quote :invoice for :amount.', 'notification_quote_viewed' => 'The following client :client viewed Quote :invoice for :amount.',
'session_expired' => 'Your session has expired.', 'session_expired' => 'Your session has expired.',
@ -420,7 +407,7 @@ return array(
'active' => 'Active', 'active' => 'Active',
'pending' => 'Pending', 'pending' => 'Pending',
'deleted_user' => 'Successfully deleted user', 'deleted_user' => 'Successfully deleted user',
'limit_users' => 'Sorry, this will exceed the limit of ' . MAX_NUM_USERS . ' users', 'limit_users' => 'Sorry, this will exceed the limit of :limit users',
'confirm_email_invoice' => 'Are you sure you want to email this invoice?', 'confirm_email_invoice' => 'Are you sure you want to email this invoice?',
'confirm_email_quote' => 'Are you sure you want to email this quote?', 'confirm_email_quote' => 'Are you sure you want to email this quote?',
@ -443,7 +430,7 @@ return array(
'share_invoice_counter' => 'Share invoice counter', 'share_invoice_counter' => 'Share invoice counter',
'invoice_issued_to' => 'Invoice issued to', 'invoice_issued_to' => 'Invoice issued to',
'invalid_counter' => 'To prevent a possible conflict please set either an invoice or quote number prefix', 'invalid_counter' => 'To prevent a possible conflict please set either an invoice or quote number prefix',
'mark_sent' => 'Mark sent', 'mark_sent' => 'Mark sent',
'gateway_help_1' => ':link to sign up for Authorize.net.', 'gateway_help_1' => ':link to sign up for Authorize.net.',
@ -455,7 +442,7 @@ return array(
'more_designs_title' => 'Additional Invoice Designs', 'more_designs_title' => 'Additional Invoice Designs',
'more_designs_cloud_header' => 'Go Pro for more invoice designs', 'more_designs_cloud_header' => 'Go Pro for more invoice designs',
'more_designs_cloud_text' => '', 'more_designs_cloud_text' => '',
'more_designs_self_host_header' => 'Get 6 more invoice designs for just $'.INVOICE_DESIGNS_PRICE, 'more_designs_self_host_header' => 'Get 6 more invoice designs for just $:price',
'more_designs_self_host_text' => '', 'more_designs_self_host_text' => '',
'buy' => 'Buy', 'buy' => 'Buy',
'bought_designs' => 'Successfully added additional invoice designs', 'bought_designs' => 'Successfully added additional invoice designs',
@ -706,7 +693,7 @@ return array(
'email_error' => 'There was a problem sending the email', 'email_error' => 'There was a problem sending the email',
'confirm_recurring_timing' => 'Note: emails are sent at the start of the hour.', 'confirm_recurring_timing' => 'Note: emails are sent at the start of the hour.',
'old_browser' => 'Please use a <a href="'.OUTDATE_BROWSER_URL.'" target="_blank">newer browser</a>', 'old_browser' => 'Please use a <a href=":link" target="_blank">newer browser</a>',
'payment_terms_help' => 'Sets the default invoice due date', 'payment_terms_help' => 'Sets the default invoice due date',
'unlink_account' => 'Unlink Account', 'unlink_account' => 'Unlink Account',
'unlink' => 'Unlink', 'unlink' => 'Unlink',
@ -740,7 +727,7 @@ return array(
'recent_payments' => 'Recent Payments', 'recent_payments' => 'Recent Payments',
'outstanding' => 'Outstanding', 'outstanding' => 'Outstanding',
'manage_companies' => 'Manage Companies', 'manage_companies' => 'Manage Companies',
'total_revenue' => 'Total Revenue', 'total_revenue' => 'Total Revenue',
'current_user' => 'Current User', 'current_user' => 'Current User',
'new_recurring_invoice' => 'New Recurring Invoice', 'new_recurring_invoice' => 'New Recurring Invoice',
@ -803,11 +790,10 @@ return array(
'invoice_quote_number' => 'Invoice and Quote Numbers', 'invoice_quote_number' => 'Invoice and Quote Numbers',
'invoice_charges' => 'Invoice Charges', 'invoice_charges' => 'Invoice Charges',
'invitation_status' => [ 'invitation_status_sent' => 'Email Sent',
'sent' => 'Email Sent', 'invitation_status_opened' => 'Email Openend',
'opened' => 'Email Openend', 'invitation_status_viewed' => 'Invoice Viewed',
'viewed' => 'Invoice Viewed',
],
'notification_invoice_bounced' => 'We were unable to deliver Invoice :invoice to :contact.', 'notification_invoice_bounced' => 'We were unable to deliver Invoice :invoice to :contact.',
'notification_invoice_bounced_subject' => 'Unable to deliver Invoice :invoice', 'notification_invoice_bounced_subject' => 'Unable to deliver Invoice :invoice',
'notification_quote_bounced' => 'We were unable to deliver Quote :invoice to :contact.', 'notification_quote_bounced' => 'We were unable to deliver Quote :invoice to :contact.',
@ -928,14 +914,12 @@ return array(
'no_mapper' => 'No valid mapping for file', 'no_mapper' => 'No valid mapping for file',
'invalid_csv_header' => 'Invalid CSV Header', 'invalid_csv_header' => 'Invalid CSV Header',
'email_errors' => [ 'email_error_inactive_client' => 'Emails can not be sent to inactive clients',
'inactive_client' => 'Emails can not be sent to inactive clients', 'email_error_inactive_invoice' => 'Emails can not be sent to inactive invoices',
'inactive_contact' => 'Emails can not be sent to inactive contacts', 'email_error_inactive_contact' => 'Emails can not be sent to inactive contacts',
'inactive_invoice' => 'Emails can not be sent to inactive invoices', 'email_error_user_unregistered' => 'Please register your account to send emails',
'user_unregistered' => 'Please register your account to send emails', 'email_error_user_unconfirmed' => 'Please confirm your account to send emails',
'user_unconfirmed' => 'Please confirm your account to send emails', 'email_error_invalid_contact_email' => 'Invalid contact email',
'invalid_contact_email' => 'Invalid contact email',
],
'client_portal' => 'Client Portal', 'client_portal' => 'Client Portal',
'admin' => 'Admin', 'admin' => 'Admin',
@ -989,7 +973,7 @@ return array(
'email_designs' => 'Email Designs', 'email_designs' => 'Email Designs',
'assigned_when_sent' => 'Assigned when sent', 'assigned_when_sent' => 'Assigned when sent',
'white_label_custom_css' => ':link for $'.WHITE_LABEL_PRICE.' to enable custom styling and help support our project.', 'white_label_custom_css' => ':link for $:price to enable custom styling and help support our project.',
'white_label_purchase_link' => 'Purchase a white label license', 'white_label_purchase_link' => 'Purchase a white label license',
// Expense / vendor // Expense / vendor
@ -1096,7 +1080,7 @@ return array(
'archived_bank_account' => 'Successfully archived bank account', 'archived_bank_account' => 'Successfully archived bank account',
'created_bank_account' => 'Successfully created bank account', 'created_bank_account' => 'Successfully created bank account',
'validate_bank_account' => 'Validate Bank Account', 'validate_bank_account' => 'Validate Bank Account',
'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href="'.OFX_HOME_URL.'" target="_blank">400+ US banks.</a>', 'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href=":link" target="_blank">400+ US banks.</a>',
'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.', 'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.',
'bank_password_warning' => 'Warning: your password may be transmitted in plain text, consider enabling HTTPS.', 'bank_password_warning' => 'Warning: your password may be transmitted in plain text, consider enabling HTTPS.',
'username' => 'Username', 'username' => 'Username',
@ -1131,7 +1115,7 @@ return array(
'trial_call_to_action' => 'Start Free Trial', 'trial_call_to_action' => 'Start Free Trial',
'trial_success' => 'Successfully enabled two week free pro plan trial', 'trial_success' => 'Successfully enabled two week free pro plan trial',
'overdue' => 'Overdue', 'overdue' => 'Overdue',
'white_label_text' => 'Purchase a ONE YEAR white label license for $'.WHITE_LABEL_PRICE.' to remove the Invoice Ninja branding from the client portal and help support our project.', 'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding from the client portal and help support our project.',
'navigation' => 'Navigation', 'navigation' => 'Navigation',
'list_invoices' => 'List Invoices', 'list_invoices' => 'List Invoices',
@ -1162,14 +1146,14 @@ return array(
'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.', 'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.',
'send_portal_password'=>'Generate password automatically', 'send_portal_password'=>'Generate password automatically',
'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.', 'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.',
'expired' => 'Expired', 'expired' => 'Expired',
'invalid_card_number' => 'The credit card number is not valid.', 'invalid_card_number' => 'The credit card number is not valid.',
'invalid_expiry' => 'The expiration date is not valid.', 'invalid_expiry' => 'The expiration date is not valid.',
'invalid_cvv' => 'The CVV is not valid.', 'invalid_cvv' => 'The CVV is not valid.',
'cost' => 'Cost', 'cost' => 'Cost',
'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.', 'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.',
// User Permissions // User Permissions
'owner' => 'Owner', 'owner' => 'Owner',
'administrator' => 'Administrator', 'administrator' => 'Administrator',
@ -1187,8 +1171,8 @@ return array(
'create_all_help' => 'Allow user to create and modify records', 'create_all_help' => 'Allow user to create and modify records',
'view_all_help' => 'Allow user to view records they didn\'t create', 'view_all_help' => 'Allow user to view records they didn\'t create',
'edit_all_help' => 'Allow user to modify records they didn\'t create', 'edit_all_help' => 'Allow user to modify records they didn\'t create',
'view_payment' => 'View Payment', 'view_payment' => 'View Payment',
'january' => 'January', 'january' => 'January',
'february' => 'February', 'february' => 'February',
'march' => 'March', 'march' => 'March',
@ -1214,17 +1198,15 @@ return array(
'document_email_attachment' => 'Attach Documents', 'document_email_attachment' => 'Attach Documents',
'download_documents' => 'Download Documents (:size)', 'download_documents' => 'Download Documents (:size)',
'documents_from_expenses' => 'From Expenses:', 'documents_from_expenses' => 'From Expenses:',
'dropzone' => array(// See http://www.dropzonejs.com/#config-dictDefaultMessage 'dropzone_default_message' => 'Drop files or click to upload',
'DefaultMessage' => 'Drop files or click to upload', 'dropzone_fallback_message' => 'Your browser does not support drag\'n\'drop file uploads.',
'FallbackMessage' => 'Your browser does not support drag\'n\'drop file uploads.', 'dropzone_fallback_text' => 'Please use the fallback form below to upload your files like in the olden days.',
'FallbackText' => 'Please use the fallback form below to upload your files like in the olden days.', 'dropzone_file_too_big' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.',
'FileTooBig' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.', 'dropzone_invalid_file_type' => 'You can\'t upload files of this type.',
'InvalidFileType' => 'You can\'t upload files of this type.', 'dropzone_response_error' => 'Server responded with {{statusCode}} code.',
'ResponseError' => 'Server responded with {{statusCode}} code.', 'dropzone_cancel_upload' => 'Cancel upload',
'CancelUpload' => 'Cancel upload', 'dropzone_cancel_upload_confirmation' => 'Are you sure you want to cancel this upload?',
'CancelUploadConfirmation' => 'Are you sure you want to cancel this upload?', 'dropzone_remove_file' => 'Remove file',
'RemoveFile' => 'Remove file',
),
'documents' => 'Documents', 'documents' => 'Documents',
'document_date' => 'Document Date', 'document_date' => 'Document Date',
'document_size' => 'Size', 'document_size' => 'Size',
@ -1233,11 +1215,11 @@ return array(
'enable_client_portal_help' => 'Show/hide the client portal.', 'enable_client_portal_help' => 'Show/hide the client portal.',
'enable_client_portal_dashboard' => 'Dashboard', 'enable_client_portal_dashboard' => 'Dashboard',
'enable_client_portal_dashboard_help' => 'Show/hide the dashboard page in the client portal.', 'enable_client_portal_dashboard_help' => 'Show/hide the dashboard page in the client portal.',
// Plans // Plans
'account_management' => 'Account Management', 'account_management' => 'Account Management',
'plan_status' => 'Plan Status', 'plan_status' => 'Plan Status',
'plan_upgrade' => 'Upgrade', 'plan_upgrade' => 'Upgrade',
'plan_change' => 'Change Plan', 'plan_change' => 'Change Plan',
'pending_change_to' => 'Changes To', 'pending_change_to' => 'Changes To',
@ -1267,9 +1249,9 @@ return array(
'plan_paid' => 'Term Started', 'plan_paid' => 'Term Started',
'plan_started' => 'Plan Started', 'plan_started' => 'Plan Started',
'plan_expires' => 'Plan Expires', 'plan_expires' => 'Plan Expires',
'white_label_button' => 'White Label', 'white_label_button' => 'White Label',
'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.',
'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.',
'enterprise_plan_product' => 'Enterprise Plan', 'enterprise_plan_product' => 'Enterprise Plan',
@ -1289,5 +1271,5 @@ return array(
'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.', 'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.',
'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.', 'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.',
'return_to_app' => 'Return to app', 'return_to_app' => 'Return to app',
); );

View File

@ -1,4 +1,4 @@
<?php <?php
return array( return array(
@ -117,7 +117,7 @@ return array(
'billed_client' => 'fakturert klient', 'billed_client' => 'fakturert klient',
'billed_clients' => 'fakturerte klienter', 'billed_clients' => 'fakturerte klienter',
'active_client' => 'aktiv klient', 'active_client' => 'aktiv klient',
'active_clients' => 'aktive klienter', 'active_clients' => 'aktive klienter',
'invoices_past_due' => 'Forfalte Fakturaer', 'invoices_past_due' => 'Forfalte Fakturaer',
'upcoming_invoices' => 'Forestående Fakturaer', 'upcoming_invoices' => 'Forestående Fakturaer',
'average_invoice' => 'Gjennomsnittlige Fakturaer', 'average_invoice' => 'Gjennomsnittlige Fakturaer',
@ -261,16 +261,16 @@ return array(
'email_salutation' => 'Kjære :name,', 'email_salutation' => 'Kjære :name,',
'email_signature' => 'Med vennlig hilsen,', 'email_signature' => 'Med vennlig hilsen,',
'email_from' => 'Invoice Ninja Gjengen', 'email_from' => 'Invoice Ninja Gjengen',
'user_email_footer' => 'For å justere varslingsinnstillingene vennligst besøk '.SITE_URL.'/settings/notifications', 'user_email_footer' => 'For å justere varslingsinnstillingene vennligst besøk :link',
'invoice_link_message' => 'Hvis du vil se din klientfaktura klikk på lenken under:', 'invoice_link_message' => 'Hvis du vil se din klientfaktura klikk på lenken under:',
'notification_invoice_paid_subject' => 'Faktura :invoice betalt av :client', 'notification_invoice_paid_subject' => 'Faktura :invoice betalt av :client',
'notification_invoice_sent_subject' => 'Faktura :invoice sendt til :client', 'notification_invoice_sent_subject' => 'Faktura :invoice sendt til :client',
'notification_invoice_viewed_subject' => 'Faktura :invoice sett av :client', 'notification_invoice_viewed_subject' => 'Faktura :invoice sett av :client',
'notification_invoice_paid' => 'En betaling pålydende :amount ble gjort av :client for faktura :invoice.', 'notification_invoice_paid' => 'En betaling pålydende :amount ble gjort av :client for faktura :invoice.',
'notification_invoice_sent' => 'E-post har blitt sendt til :client - Faktura :invoice pålydende :amount.', 'notification_invoice_sent' => 'E-post har blitt sendt til :client - Faktura :invoice pålydende :amount.',
'notification_invoice_viewed' => ':client har nå sett faktura :invoice pålydende :amount.', 'notification_invoice_viewed' => ':client har nå sett faktura :invoice pålydende :amount.',
'reset_password' => 'Du kan nullstille ditt passord ved å besøke følgende lenke:', 'reset_password' => 'Du kan nullstille ditt passord ved å besøke følgende lenke:',
'reset_password_footer' => 'Hvis du ikke ba om å få nullstillt ditt passord, vennligst kontakt kundeservice: ' . CONTACT_EMAIL, 'reset_password_footer' => 'Hvis du ikke ba om å få nullstillt ditt passord, vennligst kontakt kundeservice: :email',
// Payment page // Payment page
@ -280,22 +280,9 @@ return array(
'expiration_year' => 'Utløpsår', 'expiration_year' => 'Utløpsår',
'cvv' => 'CVV', 'cvv' => 'CVV',
// Security alerts
'security' => [
'too_many_attempts' => 'For mange forsøk. Prøv igjen om noen få minutter.',
'wrong_credentials' => 'Feil e-post eller passord.',
'confirmation' => 'Din konto har blitt bekreftet!',
'wrong_confirmation' => 'Feil bekreftelseskode.',
'password_forgot' => 'Informasjonen om tilbakestilling av passord ble sendt til e-postadressen.',
'password_reset' => 'Passordet ditt er endret.',
'wrong_password_reset' => 'Ugyldig passord. Prøv på nytt',
],
// Pro Plan // Pro Plan
'pro_plan' => [ 'pro_plan_remove_logo' => ':link for å fjerne Invoice Ninja-logoen, oppgrader til en Pro Plan',
'remove_logo' => ':link for å fjerne Invoice Ninja-logoen, oppgrader til en Pro Plan', 'pro_plan_remove_logo_link' => 'Klikk her',
'remove_logo_link' => 'Klikk her',
],
'logout' => 'Logg ut', 'logout' => 'Logg ut',
'sign_up_to_save' => 'Registrer deg for å lagre arbeidet ditt', 'sign_up_to_save' => 'Registrer deg for å lagre arbeidet ditt',
@ -311,11 +298,11 @@ return array(
'pro_plan_product' => 'Pro Plan', 'pro_plan_product' => 'Pro Plan',
'pro_plan_description' => 'Ett års innmelding i Invoice Ninja Pro Plan.', 'pro_plan_description' => 'Ett års innmelding i Invoice Ninja Pro Plan.',
'pro_plan_success' => 'Takk for at du valgte Invoice Ninja\'s Pro plan!<p/>&nbsp;<br/> 'pro_plan_success' => 'Takk for at du valgte Invoice Ninja\'s Pro plan!<p/>&nbsp;<br/>
<b>Neste steg</b><p/>en betalbar faktura er sendt til e-postadressen <b>Neste steg</b><p/>en betalbar faktura er sendt til e-postadressen
som er tilknyttet kontoen din. For å låse opp alle de utrolige som er tilknyttet kontoen din. For å låse opp alle de utrolige
Pro-funksjonene, kan du følge instruksjonene fakturaen til å Pro-funksjonene, kan du følge instruksjonene fakturaen til å
betale for et år med Pro-nivå funksjoner.<p/> betale for et år med Pro-nivå funksjoner.<p/>
Finner du ikke fakturaen? Trenger du mer hjelp? Vi hjelper deg gjerne om det skulle være noe Finner du ikke fakturaen? Trenger du mer hjelp? Vi hjelper deg gjerne om det skulle være noe
-- kontakt oss contact@invoiceninja.com', -- kontakt oss contact@invoiceninja.com',
'unsaved_changes' => 'Du har ulagrede endringer', 'unsaved_changes' => 'Du har ulagrede endringer',
@ -341,7 +328,7 @@ return array(
'archive_product' => 'Arkiver produkt', 'archive_product' => 'Arkiver produkt',
'updated_product' => 'Produkt oppdatert', 'updated_product' => 'Produkt oppdatert',
'created_product' => 'Produkt lagret', 'created_product' => 'Produkt lagret',
'archived_product' => 'Produkt arkivert', 'archived_product' => 'Produkt arkivert',
'pro_plan_custom_fields' => ':link for å aktivere egendefinerte felt ved å delta i Pro Plan', 'pro_plan_custom_fields' => ':link for å aktivere egendefinerte felt ved å delta i Pro Plan',
'advanced_settings' => 'Avanserte innstillinger', 'advanced_settings' => 'Avanserte innstillinger',
@ -394,7 +381,7 @@ return array(
'notification_quote_sent_subject' => 'Tilbud :invoice sendt til :client', 'notification_quote_sent_subject' => 'Tilbud :invoice sendt til :client',
'notification_quote_viewed_subject' => 'Tilbudet :invoice er nå sett av :client', 'notification_quote_viewed_subject' => 'Tilbudet :invoice er nå sett av :client',
'notification_quote_sent' => 'Følgende klient :client ble sendt tilbudsfaktura :invoice pålydende :amount.', 'notification_quote_sent' => 'Følgende klient :client ble sendt tilbudsfaktura :invoice pålydende :amount.',
'notification_quote_viewed' => 'Følgende klient :client har nå sett tilbudsfakturaen :invoice pålydende :amount.', 'notification_quote_viewed' => 'Følgende klient :client har nå sett tilbudsfakturaen :invoice pålydende :amount.',
'session_expired' => 'Økten er utløpt.', 'session_expired' => 'Økten er utløpt.',
@ -419,7 +406,7 @@ return array(
'active' => 'Aktiv', 'active' => 'Aktiv',
'pending' => 'Avventer', 'pending' => 'Avventer',
'deleted_user' => 'Bruker slettet', 'deleted_user' => 'Bruker slettet',
'limit_users' => 'Dessverre, vil dette overstige grensen på ' . MAX_NUM_USERS . ' brukere', 'limit_users' => 'Dessverre, vil dette overstige grensen på :limit brukere',
'confirm_email_invoice' => 'Er du sikker på at du ønsker å e-poste denne fakturaen?', 'confirm_email_invoice' => 'Er du sikker på at du ønsker å e-poste denne fakturaen?',
'confirm_email_quote' => 'Er du sikker på at du ønsker å e-poste dette tilbudet?', 'confirm_email_quote' => 'Er du sikker på at du ønsker å e-poste dette tilbudet?',
@ -453,7 +440,7 @@ return array(
'more_designs_title' => 'Flere Faktura Design', 'more_designs_title' => 'Flere Faktura Design',
'more_designs_cloud_header' => 'Gå Pro for flere faktura design', 'more_designs_cloud_header' => 'Gå Pro for flere faktura design',
'more_designs_cloud_text' => '', 'more_designs_cloud_text' => '',
'more_designs_self_host_header' => 'Få 6 flere design for bare $'.INVOICE_DESIGNS_PRICE, 'more_designs_self_host_header' => 'Få 6 flere design for bare $:price',
'more_designs_self_host_text' => '', 'more_designs_self_host_text' => '',
'buy' => 'Kjøp', 'buy' => 'Kjøp',
'bought_designs' => 'Det ble suksessfullt lagt til flere design', 'bought_designs' => 'Det ble suksessfullt lagt til flere design',
@ -702,7 +689,7 @@ return array(
'email_error' => 'Det oppstod et problem med utsending av e-posten', 'email_error' => 'Det oppstod et problem med utsending av e-posten',
'confirm_recurring_timing' => 'Info: e-poster er sendt på starten av en time.', 'confirm_recurring_timing' => 'Info: e-poster er sendt på starten av en time.',
'old_browser' => 'Vennligst bruk en <a href="'.OUTDATE_BROWSER_URL.'" target="_blank">nyere nettleser</a>', 'old_browser' => 'Vennligst bruk en <a href=":link" target="_blank">nyere nettleser</a>',
'payment_terms_help' => 'Setter standard faktura dato', 'payment_terms_help' => 'Setter standard faktura dato',
'unlink_account' => 'Frakoble Konto', 'unlink_account' => 'Frakoble Konto',
'unlink' => 'Frakoble', 'unlink' => 'Frakoble',
@ -799,11 +786,9 @@ return array(
'invoice_quote_number' => 'Faktura og Tilbuds Nummer', 'invoice_quote_number' => 'Faktura og Tilbuds Nummer',
'invoice_charges' => 'Faktura Kostnader', 'invoice_charges' => 'Faktura Kostnader',
'invitation_status' => [ 'invitation_status_sent' => 'E-post Sendt',
'sent' => 'E-post Sendt', 'invitation_status_opened' => 'E-post Åpnet',
'opened' => 'E-post Åpnet', 'invitation_status_viewed' => 'Faktura Vist',
'viewed' => 'Faktura Vist',
],
'notification_invoice_bounced' => 'Vi klarte ikke å levere Faktura :invoice til :contact.', 'notification_invoice_bounced' => 'Vi klarte ikke å levere Faktura :invoice til :contact.',
'notification_invoice_bounced_subject' => 'Klarte ikke å levere Faktura :invoice', 'notification_invoice_bounced_subject' => 'Klarte ikke å levere Faktura :invoice',
@ -926,14 +911,12 @@ return array(
'no_mapper' => 'No valid mapping for file', 'no_mapper' => 'No valid mapping for file',
'invalid_csv_header' => 'Invalid CSV Header', 'invalid_csv_header' => 'Invalid CSV Header',
'email_errors' => [ 'email_error_inactive_client' => 'Emails can not be sent to inactive clients',
'inactive_client' => 'Emails can not be sent to inactive clients', 'email_error_inactive_contact' => 'Emails can not be sent to inactive contacts',
'inactive_contact' => 'Emails can not be sent to inactive contacts', 'email_error_inactive_invoice' => 'Emails can not be sent to inactive invoices',
'inactive_invoice' => 'Emails can not be sent to inactive invoices', 'email_error_user_unregistered' => 'Please register your account to send emails',
'user_unregistered' => 'Please register your account to send emails', 'email_error_user_unconfirmed' => 'Please confirm your account to send emails',
'user_unconfirmed' => 'Please confirm your account to send emails', 'email_error_invalid_contact_email' => 'Invalid contact email',
'invalid_contact_email' => 'Invalid contact email',
],
'client_portal' => 'Client Portal', 'client_portal' => 'Client Portal',
'admin' => 'Admin', 'admin' => 'Admin',
@ -987,7 +970,7 @@ return array(
'email_designs' => 'Email Designs', 'email_designs' => 'Email Designs',
'assigned_when_sent' => 'Assigned when sent', 'assigned_when_sent' => 'Assigned when sent',
'white_label_custom_css' => ':link for $'.WHITE_LABEL_PRICE.' to enable custom styling and help support our project.', 'white_label_custom_css' => ':link for $:price to enable custom styling and help support our project.',
'white_label_purchase_link' => 'Purchase a white label license', 'white_label_purchase_link' => 'Purchase a white label license',
// Expense / vendor // Expense / vendor
@ -1094,7 +1077,7 @@ return array(
'archived_bank_account' => 'Successfully archived bank account', 'archived_bank_account' => 'Successfully archived bank account',
'created_bank_account' => 'Successfully created bank account', 'created_bank_account' => 'Successfully created bank account',
'validate_bank_account' => 'Validate Bank Account', 'validate_bank_account' => 'Validate Bank Account',
'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href="'.OFX_HOME_URL.'" target="_blank">400+ US banks.</a>', 'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href=":link" target="_blank">400+ US banks.</a>',
'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.', 'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.',
'bank_password_warning' => 'Warning: your password may be transmitted in plain text, consider enabling HTTPS.', 'bank_password_warning' => 'Warning: your password may be transmitted in plain text, consider enabling HTTPS.',
'username' => 'Username', 'username' => 'Username',
@ -1129,7 +1112,7 @@ return array(
'trial_call_to_action' => 'Start Free Trial', 'trial_call_to_action' => 'Start Free Trial',
'trial_success' => 'Successfully enabled two week free pro plan trial', 'trial_success' => 'Successfully enabled two week free pro plan trial',
'overdue' => 'Overdue', 'overdue' => 'Overdue',
'white_label_text' => 'Purchase a ONE YEAR white label license for $'.WHITE_LABEL_PRICE.' to remove the Invoice Ninja branding from the client portal and help support our project.', 'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding from the client portal and help support our project.',
'navigation' => 'Navigation', 'navigation' => 'Navigation',
'list_invoices' => 'List Invoices', 'list_invoices' => 'List Invoices',
@ -1160,14 +1143,14 @@ return array(
'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.', 'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.',
'send_portal_password'=>'Generate password automatically', 'send_portal_password'=>'Generate password automatically',
'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.', 'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.',
'expired' => 'Expired', 'expired' => 'Expired',
'invalid_card_number' => 'The credit card number is not valid.', 'invalid_card_number' => 'The credit card number is not valid.',
'invalid_expiry' => 'The expiration date is not valid.', 'invalid_expiry' => 'The expiration date is not valid.',
'invalid_cvv' => 'The CVV is not valid.', 'invalid_cvv' => 'The CVV is not valid.',
'cost' => 'Cost', 'cost' => 'Cost',
'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.', 'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.',
// User Permissions // User Permissions
'owner' => 'Owner', 'owner' => 'Owner',
'administrator' => 'Administrator', 'administrator' => 'Administrator',
@ -1185,8 +1168,8 @@ return array(
'create_all_help' => 'Allow user to create and modify records', 'create_all_help' => 'Allow user to create and modify records',
'view_all_help' => 'Allow user to view records they didn\'t create', 'view_all_help' => 'Allow user to view records they didn\'t create',
'edit_all_help' => 'Allow user to modify records they didn\'t create', 'edit_all_help' => 'Allow user to modify records they didn\'t create',
'view_payment' => 'View Payment', 'view_payment' => 'View Payment',
'january' => 'January', 'january' => 'January',
'february' => 'February', 'february' => 'February',
'march' => 'March', 'march' => 'March',
@ -1212,17 +1195,15 @@ return array(
'document_email_attachment' => 'Attach Documents', 'document_email_attachment' => 'Attach Documents',
'download_documents' => 'Download Documents (:size)', 'download_documents' => 'Download Documents (:size)',
'documents_from_expenses' => 'From Expenses:', 'documents_from_expenses' => 'From Expenses:',
'dropzone' => array(// See http://www.dropzonejs.com/#config-dictDefaultMessage 'dropzone_default_message' => 'Drop files or click to upload',
'DefaultMessage' => 'Drop files or click to upload', 'dropzone_fallback_message' => 'Your browser does not support drag\'n\'drop file uploads.',
'FallbackMessage' => 'Your browser does not support drag\'n\'drop file uploads.', 'dropzone_fallback_text' => 'Please use the fallback form below to upload your files like in the olden days.',
'FallbackText' => 'Please use the fallback form below to upload your files like in the olden days.', 'dropzone_file_too_big' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.',
'FileTooBig' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.', 'dropzone_invalid_file_type' => 'You can\'t upload files of this type.',
'InvalidFileType' => 'You can\'t upload files of this type.', 'dropzone_response_error' => 'Server responded with {{statusCode}} code.',
'ResponseError' => 'Server responded with {{statusCode}} code.', 'dropzone_cancel_upload' => 'Cancel upload',
'CancelUpload' => 'Cancel upload', 'dropzone_cancel_upload_confirmation' => 'Are you sure you want to cancel this upload?',
'CancelUploadConfirmation' => 'Are you sure you want to cancel this upload?', 'dropzone_remove_file' => 'Remove file',
'RemoveFile' => 'Remove file',
),
'documents' => 'Documents', 'documents' => 'Documents',
'document_date' => 'Document Date', 'document_date' => 'Document Date',
'document_size' => 'Size', 'document_size' => 'Size',
@ -1231,11 +1212,11 @@ return array(
'enable_client_portal_help' => 'Show/hide the client portal.', 'enable_client_portal_help' => 'Show/hide the client portal.',
'enable_client_portal_dashboard' => 'Dashboard', 'enable_client_portal_dashboard' => 'Dashboard',
'enable_client_portal_dashboard_help' => 'Show/hide the dashboard page in the client portal.', 'enable_client_portal_dashboard_help' => 'Show/hide the dashboard page in the client portal.',
// Plans // Plans
'account_management' => 'Account Management', 'account_management' => 'Account Management',
'plan_status' => 'Plan Status', 'plan_status' => 'Plan Status',
'plan_upgrade' => 'Upgrade', 'plan_upgrade' => 'Upgrade',
'plan_change' => 'Change Plan', 'plan_change' => 'Change Plan',
'pending_change_to' => 'Changes To', 'pending_change_to' => 'Changes To',
@ -1265,9 +1246,9 @@ return array(
'plan_paid' => 'Term Started', 'plan_paid' => 'Term Started',
'plan_started' => 'Plan Started', 'plan_started' => 'Plan Started',
'plan_expires' => 'Plan Expires', 'plan_expires' => 'Plan Expires',
'white_label_button' => 'White Label', 'white_label_button' => 'White Label',
'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.',
'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.',
'enterprise_plan_product' => 'Enterprise Plan', 'enterprise_plan_product' => 'Enterprise Plan',
@ -1287,5 +1268,5 @@ return array(
'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.', 'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.',
'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.', 'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.',
'return_to_app' => 'Return to app', 'return_to_app' => 'Return to app',
); );

View File

@ -261,7 +261,7 @@ return array(
'email_salutation' => 'Beste :name,', 'email_salutation' => 'Beste :name,',
'email_signature' => 'Met vriendelijke groeten,', 'email_signature' => 'Met vriendelijke groeten,',
'email_from' => 'Het InvoiceNinja Team', 'email_from' => 'Het InvoiceNinja Team',
'user_email_footer' => 'Ga alstublieft naar '.SITE_URL.'/settings/notifications om uw e-mail notificatie instellingen aan te passen', 'user_email_footer' => 'Ga alstublieft naar :link om uw e-mail notificatie instellingen aan te passen',
'invoice_link_message' => 'Klik op volgende link om de Factuur van uw klant te bekijken:', 'invoice_link_message' => 'Klik op volgende link om de Factuur van uw klant te bekijken:',
'notification_invoice_paid_subject' => 'Factuur :invoice is betaald door :client', 'notification_invoice_paid_subject' => 'Factuur :invoice is betaald door :client',
'notification_invoice_sent_subject' => 'Factuur :invoice is gezonden door :client', 'notification_invoice_sent_subject' => 'Factuur :invoice is gezonden door :client',
@ -270,7 +270,7 @@ return array(
'notification_invoice_sent' => 'De volgende klant :client heeft Factuur :invoice voor :amount gemaild gekregen.', 'notification_invoice_sent' => 'De volgende klant :client heeft Factuur :invoice voor :amount gemaild gekregen.',
'notification_invoice_viewed' => 'De volgende klant :client heeft Factuur :invoice voor :amount bekeken.', 'notification_invoice_viewed' => 'De volgende klant :client heeft Factuur :invoice voor :amount bekeken.',
'reset_password' => 'U kunt het wachtwoord van uw account resetten door op de volgende link te klikken:', 'reset_password' => 'U kunt het wachtwoord van uw account resetten door op de volgende link te klikken:',
'reset_password_footer' => 'Neem a.u.b. contact op met onze helpdesk indien u deze wachtwoordreset niet heeft aangevraagd. Het e-mailadres van de helpdesk is '.CONTACT_EMAIL, 'reset_password_footer' => 'Neem a.u.b. contact op met onze helpdesk indien u deze wachtwoordreset niet heeft aangevraagd. Het e-mailadres van de helpdesk is :email',
// Payment page // Payment page
'secure_payment' => 'Veilige betaling', 'secure_payment' => 'Veilige betaling',
@ -279,22 +279,9 @@ return array(
'expiration_year' => 'Verval jaar', 'expiration_year' => 'Verval jaar',
'cvv' => 'CVV', 'cvv' => 'CVV',
// Security alerts
'security' => [
'too_many_attempts' => 'Te veel pogingen. Probeer opnieuw binnen enkele minuten.',
'wrong_credentials' => 'Verkeerd e-mailadres of wachtwoord.',
'confirmation' => 'Uw account is bevestigd!',
'wrong_confirmation' => 'Verkeerde bevestigingscode.',
'password_forgot' => 'De informatie over uw wachtwoordreset is verzonden naar uw e-mailadres.',
'password_reset' => 'Uw wachtwoord is succesvol aangepast.',
'wrong_password_reset' => 'Ongeldig wachtwoord. Probeer opnieuw',
],
// Pro Plan // Pro Plan
'pro_plan' => [ 'pro_plan_remove_logo' => ':link om het InvoiceNinja logo te verwijderen door het pro plan te nemen',
'remove_logo' => ':link om het InvoiceNinja logo te verwijderen door het pro plan te nemen', 'pro_plan_remove_logo_link' => 'Klik hier',
'remove_logo_link' => 'Klik hier',
],
'logout' => 'Afmelden', 'logout' => 'Afmelden',
'sign_up_to_save' => 'Registreer u om uw werk op te slaan', 'sign_up_to_save' => 'Registreer u om uw werk op te slaan',
@ -415,7 +402,7 @@ return array(
'active' => 'Actief', 'active' => 'Actief',
'pending' => 'In afwachting', 'pending' => 'In afwachting',
'deleted_user' => 'Gebruiker succesvol verwijderd', 'deleted_user' => 'Gebruiker succesvol verwijderd',
'limit_users' => 'Sorry, dit zou de limiet van '.MAX_NUM_USERS.' gebruikers overschrijden', 'limit_users' => 'Sorry, dit zou de limiet van :limit gebruikers overschrijden',
'confirm_email_invoice' => 'Weet u zeker dat u deze factuur wilt e-mailen?', 'confirm_email_invoice' => 'Weet u zeker dat u deze factuur wilt e-mailen?',
'confirm_email_quote' => 'Weet u zeker dat u deze offerte wilt e-mailen?', 'confirm_email_quote' => 'Weet u zeker dat u deze offerte wilt e-mailen?',
@ -449,7 +436,7 @@ return array(
'more_designs_title' => 'Aanvullende factuurontwerpen', 'more_designs_title' => 'Aanvullende factuurontwerpen',
'more_designs_cloud_header' => 'Neem Pro Plan voor meer factuurontwerpen', 'more_designs_cloud_header' => 'Neem Pro Plan voor meer factuurontwerpen',
'more_designs_cloud_text' => '', 'more_designs_cloud_text' => '',
'more_designs_self_host_header' => 'Krijg 6 extra factuurontwerpen voor maar $'.INVOICE_DESIGNS_PRICE, 'more_designs_self_host_header' => 'Krijg 6 extra factuurontwerpen voor maar $:price',
'more_designs_self_host_text' => '', 'more_designs_self_host_text' => '',
'buy' => 'Koop', 'buy' => 'Koop',
'bought_designs' => 'Aanvullende factuurontwerpen succesvol toegevoegd', 'bought_designs' => 'Aanvullende factuurontwerpen succesvol toegevoegd',
@ -698,7 +685,7 @@ return array(
'email_error' => 'Er was een probleem met versturen van de e-mail', 'email_error' => 'Er was een probleem met versturen van de e-mail',
'confirm_recurring_timing' => 'Opmerking: e-mails worden aan het begin van het uur verzonden.', 'confirm_recurring_timing' => 'Opmerking: e-mails worden aan het begin van het uur verzonden.',
'old_browser' => 'Gebruik a.u.b. een <a href="'.OUTDATE_BROWSER_URL.'" target="_blank">moderne browser</a>', 'old_browser' => 'Gebruik a.u.b. een <a href=":link" target="_blank">moderne browser</a>',
'payment_terms_help' => 'Stel de standaard factuurvervaldatum in', 'payment_terms_help' => 'Stel de standaard factuurvervaldatum in',
'unlink_account' => 'Koppel account los', 'unlink_account' => 'Koppel account los',
'unlink' => 'Koppel los', 'unlink' => 'Koppel los',
@ -795,11 +782,10 @@ return array(
'invoice_quote_number' => 'Factuur- en offertenummers', 'invoice_quote_number' => 'Factuur- en offertenummers',
'invoice_charges' => 'Facturatiekosten', 'invoice_charges' => 'Facturatiekosten',
'invitation_status' => [ 'invitation_status_sent' => 'E-mail verstuurd',
'sent' => 'E-mail verstuurd', 'invitation_status_opened' => 'E-mail geopend',
'opened' => 'E-mail geopend', 'invitation_status_viewed' => 'Factuur bekeken',
'viewed' => 'Factuur bekeken',
],
'notification_invoice_bounced' => 'We konden factuur :invoice niet afleveren bij :contact.', 'notification_invoice_bounced' => 'We konden factuur :invoice niet afleveren bij :contact.',
'notification_invoice_bounced_subject' => 'Factuur :invoice kon niet worden afgeleverd', 'notification_invoice_bounced_subject' => 'Factuur :invoice kon niet worden afgeleverd',
'notification_quote_bounced' => 'We konden offerte :invoice niet afleveren bij :contact.', 'notification_quote_bounced' => 'We konden offerte :invoice niet afleveren bij :contact.',
@ -921,14 +907,12 @@ return array(
'no_mapper' => 'Geen geldige mapping voor bestand', 'no_mapper' => 'Geen geldige mapping voor bestand',
'invalid_csv_header' => 'Ongeldige CSV kop', 'invalid_csv_header' => 'Ongeldige CSV kop',
'email_errors' => [ 'email_error_inactive_client' => 'E-mails kunnen niet worden verstuurd naar inactieve klanten',
'inactive_client' => 'E-mails kunnen niet worden verstuurd naar inactieve klanten', 'email_error_inactive_contact' => 'E-mails kunnen niet worden verstuurd naar inactieve contactpersonen',
'inactive_contact' => 'E-mails kunnen niet worden verstuurd naar inactieve contactpersonen', 'email_error_inactive_invoice' => 'E-mails kunnen niet worden verstuurd naar inactieve facturen',
'inactive_invoice' => 'E-mails kunnen niet worden verstuurd naar inactieve facturen', 'email_error_user_unregistered' => 'Registreer een account om e-mails te kunnen versturen',
'user_unregistered' => 'Registreer een account om e-mails te kunnen versturen', 'email_error_user_unconfirmed' => 'Bevestig uw account om e-mails te kunnen versturen',
'user_unconfirmed' => 'Bevestig uw account om e-mails te kunnen versturen', 'email_error_invalid_contact_email' => 'Ongeldig e-mailadres van contactpersoon',
'invalid_contact_email' => 'Ongeldig e-mailadres van contactpersoon',
],
'client_portal' => 'Klantenportaal', 'client_portal' => 'Klantenportaal',
'admin' => 'Admin', 'admin' => 'Admin',
@ -982,7 +966,7 @@ return array(
'email_designs' => 'E-mail Ontwerpen', 'email_designs' => 'E-mail Ontwerpen',
'assigned_when_sent' => 'Toegwezen zodra verzonden', 'assigned_when_sent' => 'Toegwezen zodra verzonden',
'white_label_custom_css' => ':link voor $'.WHITE_LABEL_PRICE.' om eigen opmaak te gebruiken en ons project te ondersteunen.', 'white_label_custom_css' => ':link voor $:price om eigen opmaak te gebruiken en ons project te ondersteunen.',
'white_label_purchase_link' => 'Koop een whitelabel licentie', 'white_label_purchase_link' => 'Koop een whitelabel licentie',
// Expense / vendor // Expense / vendor
@ -1086,7 +1070,7 @@ return array(
'archived_bank_account' => 'Bankrekening succesvol gearchiveerd', 'archived_bank_account' => 'Bankrekening succesvol gearchiveerd',
'created_bank_account' => 'Bankrekening succesvol toegevoegd', 'created_bank_account' => 'Bankrekening succesvol toegevoegd',
'validate_bank_account' => 'Bankrekening valideren', 'validate_bank_account' => 'Bankrekening valideren',
'bank_accounts_help' => 'Koppel een bankrekening om automatisch uitgaven en leveranciers te importeren. Ondersteund American Express en <a href="'.OFX_HOME_URL.'" target="_blank">400+ banken uit de VS.</a>', 'bank_accounts_help' => 'Koppel een bankrekening om automatisch uitgaven en leveranciers te importeren. Ondersteund American Express en <a href=":link" target="_blank">400+ banken uit de VS.</a>',
'bank_password_help' => 'Opmerking: uw wachtwoord wordt beveiligd verstuurd en wordt nooit op onze servers opgeslagen.', 'bank_password_help' => 'Opmerking: uw wachtwoord wordt beveiligd verstuurd en wordt nooit op onze servers opgeslagen.',
'bank_password_warning' => 'Waarschuwing: uw wachtwoord wordt mogelijk als leesbare tekst verzonden, overweeg HTTPS in te schakelen.', 'bank_password_warning' => 'Waarschuwing: uw wachtwoord wordt mogelijk als leesbare tekst verzonden, overweeg HTTPS in te schakelen.',
'username' => 'Gebruikersnaam', 'username' => 'Gebruikersnaam',
@ -1121,7 +1105,7 @@ return array(
'trial_call_to_action' => 'Start gratis probeerversie', 'trial_call_to_action' => 'Start gratis probeerversie',
'trial_success' => 'De gratis twee weken durende probeerversie van het pro plan is succesvol geactiveerd.', 'trial_success' => 'De gratis twee weken durende probeerversie van het pro plan is succesvol geactiveerd.',
'overdue' => 'Verlopen', 'overdue' => 'Verlopen',
'white_label_text' => 'Koop een &eacute;&eacute;n jaar geldige white label licentie van $'.WHITE_LABEL_PRICE.' om de Invoice Ninja logo\'s in het klantenportaal te verbergen en ons project te ondersteunen.', 'white_label_text' => 'Koop een &eacute;&eacute;n jaar geldige white label licentie van $:price om de Invoice Ninja logo\'s in het klantenportaal te verbergen en ons project te ondersteunen.',
'navigation' => 'Navigatie', 'navigation' => 'Navigatie',
'list_invoices' => 'Toon Facturen', 'list_invoices' => 'Toon Facturen',
@ -1152,14 +1136,14 @@ return array(
'enable_portal_password_help'=>'Geeft u de mogelijkheid om een wachtwoord in te stellen voor elke contactpersoon. Als er een wachtwoord is ingesteld moet de contactpersoon het wachtwoord invoeren voordat deze facturen kan bekijken.', 'enable_portal_password_help'=>'Geeft u de mogelijkheid om een wachtwoord in te stellen voor elke contactpersoon. Als er een wachtwoord is ingesteld moet de contactpersoon het wachtwoord invoeren voordat deze facturen kan bekijken.',
'send_portal_password'=>'Wachtwoord automatisch genereren', 'send_portal_password'=>'Wachtwoord automatisch genereren',
'send_portal_password_help'=>'Als er geen wachtwoord is ingesteld zal deze automatisch worden gegenereerd en verzonden bij de eerste factuur.', 'send_portal_password_help'=>'Als er geen wachtwoord is ingesteld zal deze automatisch worden gegenereerd en verzonden bij de eerste factuur.',
'expired' => 'Verlopen', 'expired' => 'Verlopen',
'invalid_card_number' => 'Het creditcardnummer is niet geldig.', 'invalid_card_number' => 'Het creditcardnummer is niet geldig.',
'invalid_expiry' => 'De verloopdatum is niet geldig.', 'invalid_expiry' => 'De verloopdatum is niet geldig.',
'invalid_cvv' => 'Het CVV-nummer is niet geldig.', 'invalid_cvv' => 'Het CVV-nummer is niet geldig.',
'cost' => 'Kosten', 'cost' => 'Kosten',
'create_invoice_for_sample' => 'Opmerking: maak uw eerste factuur om hier een voorbeeld te zien.', 'create_invoice_for_sample' => 'Opmerking: maak uw eerste factuur om hier een voorbeeld te zien.',
// User Permissions // User Permissions
'owner' => 'Eigenaar', 'owner' => 'Eigenaar',
'administrator' => 'Beheerder', 'administrator' => 'Beheerder',
@ -1178,7 +1162,7 @@ return array(
'view_all_help' => 'Gebruiker toestemming geven om regels te bekijken die hij niet heeft gemaakt', 'view_all_help' => 'Gebruiker toestemming geven om regels te bekijken die hij niet heeft gemaakt',
'edit_all_help' => 'Gebruiker toestemming geven om regels te bewerken die hij niet heeft gemaakt', 'edit_all_help' => 'Gebruiker toestemming geven om regels te bewerken die hij niet heeft gemaakt',
'view_payment' => 'Betaling bekijken', 'view_payment' => 'Betaling bekijken',
'january' => 'januari', 'january' => 'januari',
'february' => 'februari', 'february' => 'februari',
'march' => 'maart', 'march' => 'maart',
@ -1204,17 +1188,15 @@ return array(
'document_email_attachment' => 'Attach Documents', 'document_email_attachment' => 'Attach Documents',
'download_documents' => 'Download Documents (:size)', 'download_documents' => 'Download Documents (:size)',
'documents_from_expenses' => 'From Expenses:', 'documents_from_expenses' => 'From Expenses:',
'dropzone' => array(// See http://www.dropzonejs.com/#config-dictDefaultMessage 'dropzone_default_message' => 'Drop files or click to upload',
'DefaultMessage' => 'Drop files or click to upload', 'dropzone_fallback_message' => 'Your browser does not support drag\'n\'drop file uploads.',
'FallbackMessage' => 'Your browser does not support drag\'n\'drop file uploads.', 'dropzone_fallback_text' => 'Please use the fallback form below to upload your files like in the olden days.',
'FallbackText' => 'Please use the fallback form below to upload your files like in the olden days.', 'dropzone_file_too_big' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.',
'FileTooBig' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.', 'dropzone_invalid_file_type' => 'You can\'t upload files of this type.',
'InvalidFileType' => 'You can\'t upload files of this type.', 'dropzone_response_error' => 'Server responded with {{statusCode}} code.',
'ResponseError' => 'Server responded with {{statusCode}} code.', 'dropzone_cancel_upload' => 'Cancel upload',
'CancelUpload' => 'Cancel upload', 'dropzone_cancel_upload_confirmation' => 'Are you sure you want to cancel this upload?',
'CancelUploadConfirmation' => 'Are you sure you want to cancel this upload?', 'dropzone_remove_file' => 'Remove file',
'RemoveFile' => 'Remove file',
),
'documents' => 'Documents', 'documents' => 'Documents',
'document_date' => 'Document Date', 'document_date' => 'Document Date',
'document_size' => 'Size', 'document_size' => 'Size',
@ -1223,11 +1205,11 @@ return array(
'enable_client_portal_help' => 'Show/hide the client portal.', 'enable_client_portal_help' => 'Show/hide the client portal.',
'enable_client_portal_dashboard' => 'Dashboard', 'enable_client_portal_dashboard' => 'Dashboard',
'enable_client_portal_dashboard_help' => 'Show/hide the dashboard page in the client portal.', 'enable_client_portal_dashboard_help' => 'Show/hide the dashboard page in the client portal.',
// Plans // Plans
'account_management' => 'Account Management', 'account_management' => 'Account Management',
'plan_status' => 'Plan Status', 'plan_status' => 'Plan Status',
'plan_upgrade' => 'Upgrade', 'plan_upgrade' => 'Upgrade',
'plan_change' => 'Change Plan', 'plan_change' => 'Change Plan',
'pending_change_to' => 'Changes To', 'pending_change_to' => 'Changes To',
@ -1257,9 +1239,9 @@ return array(
'plan_paid' => 'Term Started', 'plan_paid' => 'Term Started',
'plan_started' => 'Plan Started', 'plan_started' => 'Plan Started',
'plan_expires' => 'Plan Expires', 'plan_expires' => 'Plan Expires',
'white_label_button' => 'White Label', 'white_label_button' => 'White Label',
'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.',
'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.',
'enterprise_plan_product' => 'Enterprise Plan', 'enterprise_plan_product' => 'Enterprise Plan',
@ -1279,5 +1261,5 @@ return array(
'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.', 'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.',
'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.', 'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.',
'return_to_app' => 'Return to app', 'return_to_app' => 'Return to app',
); );

View File

@ -992,40 +992,26 @@ $LANG = array(
'overdue' => 'Zaległy', 'overdue' => 'Zaległy',
'white_label_text' => 'Kup white label licencję na JEDEN ROK za $'.WHITE_LABEL_PRICE.' aby usunąć z portalu klienta logo Invoice Ninja i wesprzeć nasz projekt.', 'white_label_text' => 'Kup white label licencję na JEDEN ROK za $:price aby usunąć z portalu klienta logo Invoice Ninja i wesprzeć nasz projekt.',
'user_email_footer' => 'Aby dostosować ustawienia powiadomień email, zobacz '.SITE_URL.'/settings/notifications', 'user_email_footer' => 'Aby dostosować ustawienia powiadomień email, zobacz :link',
'reset_password_footer' => 'If you did not request this password reset please email our support: '.CONTACT_EMAIL, 'reset_password_footer' => 'If you did not request this password reset please email our support: :email',
'limit_users' => 'Sorry, this will exceed the limit of '.MAX_NUM_USERS.' users', 'limit_users' => 'Sorry, this will exceed the limit of :limit users',
'more_designs_self_host_header' => 'Kup 6 szablonów faktur za jedyne $'.INVOICE_DESIGNS_PRICE, 'more_designs_self_host_header' => 'Kup 6 szablonów faktur za jedyne $:price',
'old_browser' => 'Proszę użyć <a href="'.OUTDATE_BROWSER_URL.'" target="_blank">nowszej przeglądarki</a>', 'old_browser' => 'Proszę użyć <a href=":link" target="_blank">nowszej przeglądarki</a>',
'white_label_custom_css' => ':link for $'.WHITE_LABEL_PRICE.' to enable custom styling and help support our project.', 'white_label_custom_css' => ':link for $:price to enable custom styling and help support our project.',
'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href="'.OFX_HOME_URL.'" target="_blank">400+ US banks.</a>', 'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href=":link" target="_blank">400+ US banks.</a>',
'security' => [
'too_many_attempts' => 'Zbyt wiele prób. Spróbuj ponownie za kilka minut.', 'pro_plan_remove_logo' => ':link to remove the Invoice Ninja logo by joining the Pro Plan',
'wrong_credentials' => 'Nieprawidłowy e-mail lub hasło.', 'pro_plan_remove_logo_link' => 'Kliknij tutaj',
'confirmation' => 'Twoje konto zostało potwierdzone!', 'invitation_status_sent' => 'E-mail wysłany',
'wrong_confirmation' => 'Błędny kod potwierdzający.', 'invitation_status_opened' => 'Email otwarty',
'password_forgot' => 'Informacje dotyczące resetowania hasła zostały wysłane na Twój adres e-mail.', 'invitation_status_viewed' => 'Przeglądana faktura',
'password_reset' => 'Twoje hasło zostało zmienione.', 'email_error_inactive_client' => 'E-maile nie mogą być wysyłane do klientów nieaktywnych',
'wrong_password_reset' => 'Nieprawidłowe hasło. Spróbuj ponownie', 'email_error_inactive_contact' => 'E-mail nie może zostać wysłany do nieaktywnych kontaktów',
], 'email_error_inactive_invoice' => 'E-mail nie może zostać wysłany do nieaktywnych faktur',
'pro_plan' => [ 'email_error_user_unregistered' => 'Proszę zarejestrować swoje konto, aby wysyłać e-maile',
'remove_logo' => ':link to remove the Invoice Ninja logo by joining the Pro Plan', 'email_error_user_unconfirmed' => 'Proszę potwierdzić swoje konto do wysyłania e-maili',
'remove_logo_link' => 'Kliknij tutaj', 'email_error_invalid_contact_email' => 'Nieprawidłowy e-mail kontaktowy',
],
'invitation_status' => [
'sent' => 'E-mail wysłany',
'opened' => 'Email otwarty',
'viewed' => 'Przeglądana faktura',
],
'email_errors' => [
'inactive_client' => 'E-maile nie mogą być wysyłane do klientów nieaktywnych',
'inactive_contact' => 'E-mail nie może zostać wysłany do nieaktywnych kontaktów',
'inactive_invoice' => 'E-mail nie może zostać wysłany do nieaktywnych faktur',
'user_unregistered' => 'Proszę zarejestrować swoje konto, aby wysyłać e-maile',
'user_unconfirmed' => 'Proszę potwierdzić swoje konto do wysyłania e-maili',
'invalid_contact_email' => 'Nieprawidłowy e-mail kontaktowy',
],
'navigation' => 'Nawigacja', 'navigation' => 'Nawigacja',
'list_invoices' => 'Lista faktur', 'list_invoices' => 'Lista faktur',
@ -1054,14 +1040,14 @@ $LANG = array(
'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.', 'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.',
'send_portal_password'=>'Generate password automatically', 'send_portal_password'=>'Generate password automatically',
'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.', 'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.',
'expired' => 'Wygasło', 'expired' => 'Wygasło',
'invalid_card_number' => 'Numer karty kredytowej jest nieprawidłowy.', 'invalid_card_number' => 'Numer karty kredytowej jest nieprawidłowy.',
'invalid_expiry' => 'Data ważności jest nieprawidłowa.', 'invalid_expiry' => 'Data ważności jest nieprawidłowa.',
'invalid_cvv' => 'Kod CVV jest nieprawidłowy.', 'invalid_cvv' => 'Kod CVV jest nieprawidłowy.',
'cost' => 'Koszt', 'cost' => 'Koszt',
'create_invoice_for_sample' => 'Notatka: aby zobaczyć podgląd, utwórz fakturę.', 'create_invoice_for_sample' => 'Notatka: aby zobaczyć podgląd, utwórz fakturę.',
// User Permissions // User Permissions
'owner' => 'Właściciel', 'owner' => 'Właściciel',
'administrator' => 'Administrator', 'administrator' => 'Administrator',
@ -1080,7 +1066,7 @@ $LANG = array(
'view_all_help' => 'Allow user to view records they didn\'t create', 'view_all_help' => 'Allow user to view records they didn\'t create',
'edit_all_help' => 'Allow user to modify records they didn\'t create', 'edit_all_help' => 'Allow user to modify records they didn\'t create',
'view_payment' => 'Zobacz wpłatę', 'view_payment' => 'Zobacz wpłatę',
'january' => 'Styczeń', 'january' => 'Styczeń',
'february' => 'Luty', 'february' => 'Luty',
'march' => 'Marzec', 'march' => 'Marzec',
@ -1093,7 +1079,7 @@ $LANG = array(
'october' => 'Październik', 'october' => 'Październik',
'november' => 'Listopad', 'november' => 'Listopad',
'december' => 'Grudzień', 'december' => 'Grudzień',
// Documents // Documents
'documents_header' => 'Dokumenty:', 'documents_header' => 'Dokumenty:',
'email_documents_header' => 'Dokumenty:', 'email_documents_header' => 'Dokumenty:',
@ -1106,17 +1092,15 @@ $LANG = array(
'document_email_attachment' => 'Załącz dokumenty', 'document_email_attachment' => 'Załącz dokumenty',
'download_documents' => 'Ściągnij dokumenty (:size)', 'download_documents' => 'Ściągnij dokumenty (:size)',
'documents_from_expenses' => 'From Expenses:', 'documents_from_expenses' => 'From Expenses:',
'dropzone' => array(// See http://www.dropzonejs.com/#config-dictDefaultMessage 'dropzone_default_message' => 'Upuść pliki lub kliknij, aby przesłać',
'DefaultMessage' => 'Upuść pliki lub kliknij, aby przesłać', 'dropzone_fallback_message' => 'Your browser does not support drag\'n\'drop file uploads.',
'FallbackMessage' => 'Your browser does not support drag\'n\'drop file uploads.', 'dropzone_fallback_text' => 'Please use the fallback form below to upload your files like in the olden days.',
'FallbackText' => 'Please use the fallback form below to upload your files like in the olden days.', 'dropzone_file_too_big' => 'Plik jest zbyt duży ({{filesize}}MiB). Max rozmiar pliku: {{maxFilesize}}MiB.',
'FileTooBig' => 'Plik jest zbyt duży ({{filesize}}MiB). Max rozmiar pliku: {{maxFilesize}}MiB.', 'dropzone_invalid_file_type' => 'Nie możesz przesłać plików tego typu.',
'InvalidFileType' => 'Nie możesz przesłać plików tego typu.', 'dropzone_response_error' => 'Serwer zwraca {{statusCode}} kod.',
'ResponseError' => 'Serwer zwraca {{statusCode}} kod.', 'dropzone_cancel_upload' => 'Anuluj przesyłanie',
'CancelUpload' => 'Anuluj przesyłanie', 'dropzone_cancel_upload_confirmation' => 'Czy na pewno chcesz anulować przesyłanie pliku?',
'CancelUploadConfirmation' => 'Czy na pewno chcesz anulować przesyłanie pliku?', 'dropzone_remove_file' => 'Usuń plik',
'RemoveFile' => 'Usuń plik',
),
'documents' => 'Dokumenty', 'documents' => 'Dokumenty',
'document_date' => 'Data dokumentu', 'document_date' => 'Data dokumentu',
'document_size' => 'Rozmiar', 'document_size' => 'Rozmiar',
@ -1125,11 +1109,11 @@ $LANG = array(
'enable_client_portal_help' => 'Pokaż/ukryj portal klienta.', 'enable_client_portal_help' => 'Pokaż/ukryj portal klienta.',
'enable_client_portal_dashboard' => 'Pulpit', 'enable_client_portal_dashboard' => 'Pulpit',
'enable_client_portal_dashboard_help' => 'Pokaż/ukryj pulpit w panelu klienta.', 'enable_client_portal_dashboard_help' => 'Pokaż/ukryj pulpit w panelu klienta.',
// Plans // Plans
'account_management' => 'Zarządzanie kontem', 'account_management' => 'Zarządzanie kontem',
'plan_status' => 'Plan Status', 'plan_status' => 'Plan Status',
'plan_upgrade' => 'Aktualizuj', 'plan_upgrade' => 'Aktualizuj',
'plan_change' => 'Zmień plan', 'plan_change' => 'Zmień plan',
'pending_change_to' => 'Zmienia się na', 'pending_change_to' => 'Zmienia się na',
@ -1159,9 +1143,9 @@ $LANG = array(
'plan_paid' => 'Termin rozpoczął', 'plan_paid' => 'Termin rozpoczął',
'plan_started' => 'Plan rozpoczął', 'plan_started' => 'Plan rozpoczął',
'plan_expires' => 'Plan Wygasa', 'plan_expires' => 'Plan Wygasa',
'white_label_button' => 'Biała etykieta', 'white_label_button' => 'Biała etykieta',
'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.',
'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.',
'enterprise_plan_product' => 'Plan Enterprise', 'enterprise_plan_product' => 'Plan Enterprise',
@ -1181,9 +1165,9 @@ $LANG = array(
'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.', 'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.',
'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.', 'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.',
'return_to_app' => 'Return to app', 'return_to_app' => 'Return to app',
); );
return $LANG; return $LANG;
?>. ?>.

View File

@ -258,7 +258,7 @@ return array(
'email_salutation' => 'Caro :name,', 'email_salutation' => 'Caro :name,',
'email_signature' => 'Atenciosamente,', 'email_signature' => 'Atenciosamente,',
'email_from' => 'Equipe InvoiceNinja', 'email_from' => 'Equipe InvoiceNinja',
'user_email_footer' => 'Para ajustar suas configurações de notificações de e-mail acesse '.SITE_URL.'/settings/notifications', 'user_email_footer' => 'Para ajustar suas configurações de notificações de e-mail acesse :link',
'invoice_link_message' => 'Para visualizar a fatura do seu cliente clique no link abaixo:', 'invoice_link_message' => 'Para visualizar a fatura do seu cliente clique no link abaixo:',
'notification_invoice_paid_subject' => 'Fatura :invoice foi pago por :client', 'notification_invoice_paid_subject' => 'Fatura :invoice foi pago por :client',
'notification_invoice_sent_subject' => 'Fatura :invoice foi enviado por :client', 'notification_invoice_sent_subject' => 'Fatura :invoice foi enviado por :client',
@ -267,7 +267,7 @@ return array(
'notification_invoice_sent' => 'O cliente :client foi notificado por e-mail referente à fatura :invoice de :amount.', 'notification_invoice_sent' => 'O cliente :client foi notificado por e-mail referente à fatura :invoice de :amount.',
'notification_invoice_viewed' => 'O cliente :client visualizou a fatura :invoice de :amount.', 'notification_invoice_viewed' => 'O cliente :client visualizou a fatura :invoice de :amount.',
'reset_password' => 'Você pode redefinir a sua senha clicando no seguinte link:', '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 e-mail para o nosso suporte: '.CONTACT_EMAIL, 'reset_password_footer' => 'Se você não solicitou a redefinição de sua senha por favor envie um e-mail para o nosso suporte: :email',
// Payment page // Payment page
'secure_payment' => 'Pagamento Seguro', 'secure_payment' => 'Pagamento Seguro',
@ -276,23 +276,9 @@ return array(
'expiration_year' => 'Ano de expiração', 'expiration_year' => 'Ano de expiração',
'cvv' => 'CVV', 'cvv' => 'CVV',
// This File was missing the security alerts. I'm not familiar with this language, Can someone translate?
// Security alerts
'security' => [
'too_many_attempts' => 'Muitas tentativas. Tente novamente em alguns minutos.',
'wrong_credentials' => 'E-mail ou senha incorretos.',
'confirmation' => 'Sua conta foi confirmada!',
'wrong_confirmation' => 'Código de confirmação incorreto.',
'password_forgot' => 'As informações para redefinição de senha foi enviada para seu e-mail.',
'password_reset' => 'Senha atualizada com sucesso.',
'wrong_password_reset' => 'Senha inválida. Tente novamente',
],
// Pro Plan // Pro Plan
'pro_plan' => [ 'pro_plan_remove_logo' => ':link para remover a logo do Invoice Ninja contratando o plano profissional',
'remove_logo' => ':link para remover a logo do Invoice Ninja contratando o plano profissional', 'pro_plan_remove_logo_link' => 'Clique aqui',
'remove_logo_link' => 'Clique aqui',
],
'logout' => 'Sair', 'logout' => 'Sair',
'sign_up_to_save' => 'Faça login para salvar o seu trabalho', 'sign_up_to_save' => 'Faça login para salvar o seu trabalho',
@ -413,7 +399,7 @@ return array(
'active' => 'Ativo', 'active' => 'Ativo',
'pending' => 'Pendente', 'pending' => 'Pendente',
'deleted_user' => 'Usuário deletado', 'deleted_user' => 'Usuário deletado',
'limit_users' => 'Desculpe, isto irá exceder o limite de '.MAX_NUM_USERS.' usuários', 'limit_users' => 'Desculpe, isto irá exceder o limite de :limit usuários',
'confirm_email_invoice' => 'Deseja enviar esta fatura?', 'confirm_email_invoice' => 'Deseja enviar esta fatura?',
'confirm_email_quote' => 'Deseja enviar este orçamento?', 'confirm_email_quote' => 'Deseja enviar este orçamento?',
@ -447,7 +433,7 @@ return array(
'more_designs_title' => 'Modelo Adicionais', 'more_designs_title' => 'Modelo Adicionais',
'more_designs_cloud_header' => 'Adquira o Plano Pro para mais modelos', 'more_designs_cloud_header' => 'Adquira o Plano Pro para mais modelos',
'more_designs_cloud_text' => '', 'more_designs_cloud_text' => '',
'more_designs_self_host_header' => 'Obtenha mais 6 modelos de faturas por apenas $'.INVOICE_DESIGNS_PRICE, 'more_designs_self_host_header' => 'Obtenha mais 6 modelos de faturas por apenas $:price',
'more_designs_self_host_text' => '', 'more_designs_self_host_text' => '',
'buy' => 'Comprar', 'buy' => 'Comprar',
'bought_designs' => 'Novos Modelos Adicionados', 'bought_designs' => 'Novos Modelos Adicionados',
@ -695,7 +681,7 @@ return array(
'email_error' => 'Houve um problema ao enviar o e-mail', 'email_error' => 'Houve um problema ao enviar o e-mail',
'confirm_recurring_timing' => 'Aviso: e-mails são enviados na hora de início.', 'confirm_recurring_timing' => 'Aviso: e-mails são enviados na hora de início.',
'old_browser' => 'Utilize um <a href="'.OUTDATE_BROWSER_URL.'" target="_blank">navegador atualizado</a>', 'old_browser' => 'Utilize um <a href=":link" target="_blank">navegador atualizado</a>',
'payment_terms_help' => 'Defina a data de vencimento padrão', 'payment_terms_help' => 'Defina a data de vencimento padrão',
'unlink_account' => 'Desvincular Conta', 'unlink_account' => 'Desvincular Conta',
'unlink' => 'Desvincular', 'unlink' => 'Desvincular',
@ -792,11 +778,10 @@ return array(
'invoice_quote_number' => 'Numero de Faturas e Orçamentos', 'invoice_quote_number' => 'Numero de Faturas e Orçamentos',
'invoice_charges' => 'Encargos da Fatura', 'invoice_charges' => 'Encargos da Fatura',
'invitation_status' => [ 'invitation_status_sent' => 'E-mail Enviado',
'sent' => 'E-mail Enviado', 'invitation_status_opened' => 'E-mail Aberto',
'opened' => 'E-mail Aberto', 'invitation_status_viewed' => 'E-mail Visualizado',
'viewed' => 'E-mail Visualizado',
],
'notification_invoice_bounced' => 'Não foi possível entregar a Fatura :invoice para :contact.', 'notification_invoice_bounced' => 'Não foi possível entregar a Fatura :invoice para :contact.',
'notification_invoice_bounced_subject' => 'Fatura :invoice não foi entregue', 'notification_invoice_bounced_subject' => 'Fatura :invoice não foi entregue',
'notification_quote_bounced' => 'Não foi possível entregar o Orçamento :invoice para :contact.', 'notification_quote_bounced' => 'Não foi possível entregar o Orçamento :invoice para :contact.',
@ -908,14 +893,12 @@ return array(
'include' => 'Incluir', 'include' => 'Incluir',
'logo_too_large' => 'Sua logo tem :size, para uma melhor performance sugerimos que este tamanho não ultrapasse 200KB', 'logo_too_large' => 'Sua logo tem :size, para uma melhor performance sugerimos que este tamanho não ultrapasse 200KB',
'email_errors' => [ 'email_error_inactive_client' => 'Não é possível enviar e-mails para clientes intativos',
'inactive_client' => 'Não é possível enviar e-mails para clientes intativos', 'email_error_inactive_contact' => 'Não é possível enviar e-mails para contatos intativos',
'inactive_contact' => 'Não é possível enviar e-mails para contatos intativos', 'email_error_inactive_invoice' => 'Não é possível enviar e-mails em faturas intativas',
'inactive_invoice' => 'Não é possível enviar e-mails em faturas intativas', 'email_error_user_unregistered' => 'Registre sua conta para enviar e-mails',
'user_unregistered' => 'Registre sua conta para enviar e-mails', 'email_error_user_unconfirmed' => 'Confirme sua conta para enviar e-mails',
'user_unconfirmed' => 'Confirme sua conta para enviar e-mails', 'email_error_invalid_contact_email' => 'E-mail do contato inválido',
'invalid_contact_email' => 'E-mail do contato inválido',
],
'import_freshbooks' => 'Importar de FreshBooks', 'import_freshbooks' => 'Importar de FreshBooks',
'import_data' => 'Importar Dados', 'import_data' => 'Importar Dados',
@ -979,7 +962,7 @@ return array(
'email_designs' => 'Design de E-mails', 'email_designs' => 'Design de E-mails',
'assigned_when_sent' => 'Assinar quando enviar', 'assigned_when_sent' => 'Assinar quando enviar',
'white_label_custom_css' => ':link apenas $'.WHITE_LABEL_PRICE.' para permitir um estilo personalizado e apoiar o nosso projecto.', 'white_label_custom_css' => ':link apenas $:price para permitir um estilo personalizado e apoiar o nosso projecto.',
'white_label_purchase_link' => 'Adquira uma licença white label', 'white_label_purchase_link' => 'Adquira uma licença white label',
// Expense / vendor // Expense / vendor
@ -1083,7 +1066,7 @@ return array(
'archived_bank_account' => 'Conta bancária arquivada com sucesso', 'archived_bank_account' => 'Conta bancária arquivada com sucesso',
'created_bank_account' => 'Conta bancária criada com sucesso', 'created_bank_account' => 'Conta bancária criada com sucesso',
'validate_bank_account' => 'Validar Conta Bancária', 'validate_bank_account' => 'Validar Conta Bancária',
'bank_accounts_help' => 'Conecte sua conta bancária para importar suas despesas e criar fornecedores. Suporte ao American Express e <a href="'.OFX_HOME_URL.'" target="_blank">400+ bancos americanos.</a>', 'bank_accounts_help' => 'Conecte sua conta bancária para importar suas despesas e criar fornecedores. Suporte ao American Express e <a href=":link" target="_blank">400+ bancos americanos.</a>',
'bank_password_help' => 'Nota: sua senha é transferida de forma segura e não será armazenada em nossos servidores.', 'bank_password_help' => 'Nota: sua senha é transferida de forma segura e não será armazenada em nossos servidores.',
'bank_password_warning' => 'Atenção: sua senha será transferida de forma não segura, considere habilitar HTTPS.', 'bank_password_warning' => 'Atenção: sua senha será transferida de forma não segura, considere habilitar HTTPS.',
'username' => 'Usuário', 'username' => 'Usuário',
@ -1118,7 +1101,7 @@ return array(
'trial_call_to_action' => 'Iniciar período de testes', 'trial_call_to_action' => 'Iniciar período de testes',
'trial_success' => 'Duas semanas de testes foi habilitado com sucesso', 'trial_success' => 'Duas semanas de testes foi habilitado com sucesso',
'overdue' => 'Vencido', 'overdue' => 'Vencido',
'white_label_text' => 'Adquira UM ano de licença white label por $'.WHITE_LABEL_PRICE.' para remover a marca Invoice Ninja do portal do cliente e ajudar nosso projeto.', 'white_label_text' => 'Adquira UM ano de licença white label por $:price para remover a marca Invoice Ninja do portal do cliente e ajudar nosso projeto.',
'navigation' => 'Navegação', 'navigation' => 'Navegação',
'list_invoices' => 'Listar Faturas', 'list_invoices' => 'Listar Faturas',
@ -1149,14 +1132,14 @@ return array(
'enable_portal_password_help'=>'Permite definir uma senha para cada contato. Se uma senha for definida, o contato deverá informar sua senha antes de visualizar a fatura.', 'enable_portal_password_help'=>'Permite definir uma senha para cada contato. Se uma senha for definida, o contato deverá informar sua senha antes de visualizar a fatura.',
'send_portal_password'=>'Gerar senha automaticamente', 'send_portal_password'=>'Gerar senha automaticamente',
'send_portal_password_help'=>'Se uma senha não for definida, uma senha será gerada e enviada juntamente com a primeira fatura.', 'send_portal_password_help'=>'Se uma senha não for definida, uma senha será gerada e enviada juntamente com a primeira fatura.',
'expired' => 'Expireda', 'expired' => 'Expireda',
'invalid_card_number' => 'Cartão de Crédito inválido.', 'invalid_card_number' => 'Cartão de Crédito inválido.',
'invalid_expiry' => 'Data para expirar não é valida.', 'invalid_expiry' => 'Data para expirar não é valida.',
'invalid_cvv' => 'O código CVV não é válido.', 'invalid_cvv' => 'O código CVV não é válido.',
'cost' => 'Custo', 'cost' => 'Custo',
'create_invoice_for_sample' => 'Nota: cria sua primeira fatura para visualizar aqui.', 'create_invoice_for_sample' => 'Nota: cria sua primeira fatura para visualizar aqui.',
// User Permissions // User Permissions
'owner' => 'Proprietário', 'owner' => 'Proprietário',
'administrator' => 'Administrador', 'administrator' => 'Administrador',
@ -1174,8 +1157,8 @@ return array(
'create_all_help' => 'Permite o usuário criar e alterar todos os regitros', 'create_all_help' => 'Permite o usuário criar e alterar todos os regitros',
'view_all_help' => 'Permite usuario visualizar regitros que ele não criou', 'view_all_help' => 'Permite usuario visualizar regitros que ele não criou',
'edit_all_help' => 'Permite usuario editar regitros que ele não criou', 'edit_all_help' => 'Permite usuario editar regitros que ele não criou',
'view_payment' => 'Visualizar ', 'view_payment' => 'Visualizar ',
'january' => 'Janeiro', 'january' => 'Janeiro',
'february' => 'Fevereiro', 'february' => 'Fevereiro',
'march' => 'Março', 'march' => 'Março',
@ -1201,17 +1184,15 @@ return array(
'document_email_attachment' => 'Attach Documents', 'document_email_attachment' => 'Attach Documents',
'download_documents' => 'Download Documents (:size)', 'download_documents' => 'Download Documents (:size)',
'documents_from_expenses' => 'From Expenses:', 'documents_from_expenses' => 'From Expenses:',
'dropzone' => array(// See http://www.dropzonejs.com/#config-dictDefaultMessage 'dropzone_default_message' => 'Drop files or click to upload',
'DefaultMessage' => 'Drop files or click to upload', 'dropzone_fallback_message' => 'Your browser does not support drag\'n\'drop file uploads.',
'FallbackMessage' => 'Your browser does not support drag\'n\'drop file uploads.', 'dropzone_fallback_text' => 'Please use the fallback form below to upload your files like in the olden days.',
'FallbackText' => 'Please use the fallback form below to upload your files like in the olden days.', 'dropzone_file_too_big' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.',
'FileTooBig' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.', 'dropzone_invalid_file_type' => 'You can\'t upload files of this type.',
'InvalidFileType' => 'You can\'t upload files of this type.', 'dropzone_response_error' => 'Server responded with {{statusCode}} code.',
'ResponseError' => 'Server responded with {{statusCode}} code.', 'dropzone_cancel_upload' => 'Cancel upload',
'CancelUpload' => 'Cancel upload', 'dropzone_cancel_upload_confirmation' => 'Are you sure you want to cancel this upload?',
'CancelUploadConfirmation' => 'Are you sure you want to cancel this upload?', 'dropzone_remove_file' => 'Remove file',
'RemoveFile' => 'Remove file',
),
'documents' => 'Documents', 'documents' => 'Documents',
'document_date' => 'Document Date', 'document_date' => 'Document Date',
'document_size' => 'Size', 'document_size' => 'Size',
@ -1220,11 +1201,11 @@ return array(
'enable_client_portal_help' => 'Show/hide the client portal.', 'enable_client_portal_help' => 'Show/hide the client portal.',
'enable_client_portal_dashboard' => 'Dashboard', 'enable_client_portal_dashboard' => 'Dashboard',
'enable_client_portal_dashboard_help' => 'Show/hide the dashboard page in the client portal.', 'enable_client_portal_dashboard_help' => 'Show/hide the dashboard page in the client portal.',
// Plans // Plans
'account_management' => 'Account Management', 'account_management' => 'Account Management',
'plan_status' => 'Plan Status', 'plan_status' => 'Plan Status',
'plan_upgrade' => 'Upgrade', 'plan_upgrade' => 'Upgrade',
'plan_change' => 'Change Plan', 'plan_change' => 'Change Plan',
'pending_change_to' => 'Changes To', 'pending_change_to' => 'Changes To',
@ -1254,9 +1235,9 @@ return array(
'plan_paid' => 'Term Started', 'plan_paid' => 'Term Started',
'plan_started' => 'Plan Started', 'plan_started' => 'Plan Started',
'plan_expires' => 'Plan Expires', 'plan_expires' => 'Plan Expires',
'white_label_button' => 'White Label', 'white_label_button' => 'White Label',
'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.',
'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.',
'enterprise_plan_product' => 'Enterprise Plan', 'enterprise_plan_product' => 'Enterprise Plan',
@ -1276,5 +1257,5 @@ return array(
'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.', 'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.',
'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.', 'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.',
'return_to_app' => 'Return to app', 'return_to_app' => 'Return to app',
); );

View File

@ -262,7 +262,7 @@ return array(
'email_salutation' => 'Hej :name,', 'email_salutation' => 'Hej :name,',
'email_signature' => 'Vänliga hälsningar,', 'email_signature' => 'Vänliga hälsningar,',
'email_from' => 'Invoice Ninja teamet', 'email_from' => 'Invoice Ninja teamet',
'user_email_footer' => 'För att anpassa dina e-post notifieringar gå till '.SITE_URL.'/settings/notifications', 'user_email_footer' => 'För att anpassa dina e-post notifieringar gå till :link',
'invoice_link_message' => 'För att se din kundfaktura klicka på länken nedan:', 'invoice_link_message' => 'För att se din kundfaktura klicka på länken nedan:',
'notification_invoice_paid_subject' => 'Faktura :invoice är betald av :client', 'notification_invoice_paid_subject' => 'Faktura :invoice är betald av :client',
'notification_invoice_sent_subject' => 'Faktura :invoice är skickad till :client', 'notification_invoice_sent_subject' => 'Faktura :invoice är skickad till :client',
@ -271,7 +271,7 @@ return array(
'notification_invoice_sent' => 'Följande kund :client har mailats fakturan :invoice på :amount.', 'notification_invoice_sent' => 'Följande kund :client har mailats fakturan :invoice på :amount.',
'notification_invoice_viewed' => 'Följande kund :client har sett fakturan :invoice på :amount.', 'notification_invoice_viewed' => 'Följande kund :client har sett fakturan :invoice på :amount.',
'reset_password' => 'Du kan återställa ditt lösenord genom att klicka på länken nedan:', 'reset_password' => 'Du kan återställa ditt lösenord genom att klicka på länken nedan:',
'reset_password_footer' => 'Om du inte begärt en återställning av ditt lösenord så var snäll och maila vår support: '.CONTACT_EMAIL, 'reset_password_footer' => 'Om du inte begärt en återställning av ditt lösenord så var snäll och maila vår support: :email',
// Payment page // Payment page
'secure_payment' => 'Säker betalning', 'secure_payment' => 'Säker betalning',
@ -280,22 +280,9 @@ return array(
'expiration_year' => 'Giltig till år', 'expiration_year' => 'Giltig till år',
'cvv' => 'CVV', 'cvv' => 'CVV',
// Security alerts
'confide' => [
'too_many_attempts' => 'För många felaktiga försök. Pröva igen om ett par minuter.',
'wrong_credentials' => 'Felaktig e-postadress eller lösenord.',
'confirmation' => 'Ditt konto har bekräftats!',
'wrong_confirmation' => 'Felaktig bekräftelsekod.',
'password_forgot' => 'Information angående återställning av ditt lösenord har skickats till dig via e-post.',
'password_reset' => 'Ditt lösenord har uppdaterats.',
'wrong_password_reset' => 'Felaktigt lösenord. Försök igen',
],
// Pro Plan // Pro Plan
'pro_plan' => [ 'pro_plan_remove_logo' => ':link för att ta bort Invoice Ninja loggan genom att uppgradera till Pro Plan',
'remove_logo' => ':link för att ta bort Invoice Ninja loggan genom att uppgradera till Pro Plan', 'pro_plan_remove_logo_link' => 'Klicka här',
'remove_logo_link' => 'Klicka här',
],
'logout' => 'Logga ut', 'logout' => 'Logga ut',
'sign_up_to_save' => 'Registrera dig för att spara ditt arbete', 'sign_up_to_save' => 'Registrera dig för att spara ditt arbete',
@ -418,7 +405,7 @@ return array(
'active' => 'Aktiv', 'active' => 'Aktiv',
'pending' => 'Avvaktar', 'pending' => 'Avvaktar',
'deleted_user' => 'Användare borttagen', 'deleted_user' => 'Användare borttagen',
'limit_users' => 'Ledsen, men du får skapa max '.MAX_NUM_USERS.' användare', 'limit_users' => 'Ledsen, men du får skapa max :limit användare',
'confirm_email_invoice' => 'Är du säker på att du vill maila denna fakturan?', 'confirm_email_invoice' => 'Är du säker på att du vill maila denna fakturan?',
'confirm_email_quote' => 'Är du säker på att du vill maila denna offerten?', 'confirm_email_quote' => 'Är du säker på att du vill maila denna offerten?',
@ -452,7 +439,7 @@ return array(
'more_designs_title' => 'Fler fakturalayouter', 'more_designs_title' => 'Fler fakturalayouter',
'more_designs_cloud_header' => 'Uppgrader till Pro för fler fakturalayouter', 'more_designs_cloud_header' => 'Uppgrader till Pro för fler fakturalayouter',
'more_designs_cloud_text' => '', 'more_designs_cloud_text' => '',
'more_designs_self_host_header' => 'Få ytterliggare 6 fakturalayouter för bara $'.INVOICE_DESIGNS_PRICE, 'more_designs_self_host_header' => 'Få ytterliggare 6 fakturalayouter för bara $:price',
'more_designs_self_host_text' => '', 'more_designs_self_host_text' => '',
'buy' => 'Köp', 'buy' => 'Köp',
'bought_designs' => 'Fler fakturalayouter tillagda', 'bought_designs' => 'Fler fakturalayouter tillagda',
@ -701,7 +688,7 @@ return array(
'email_error' => 'There was a problem sending the email', 'email_error' => 'There was a problem sending the email',
'confirm_recurring_timing' => 'Note: emails are sent at the start of the hour.', 'confirm_recurring_timing' => 'Note: emails are sent at the start of the hour.',
'old_browser' => 'Please use a <a href="'.OUTDATE_BROWSER_URL.'" target="_blank">newer browser</a>', 'old_browser' => 'Please use a <a href=":link" target="_blank">newer browser</a>',
'payment_terms_help' => 'Sets the default invoice due date', 'payment_terms_help' => 'Sets the default invoice due date',
'unlink_account' => 'Unlink Account', 'unlink_account' => 'Unlink Account',
'unlink' => 'Unlink', 'unlink' => 'Unlink',
@ -798,11 +785,10 @@ return array(
'invoice_quote_number' => 'Invoice and Quote Numbers', 'invoice_quote_number' => 'Invoice and Quote Numbers',
'invoice_charges' => 'Invoice Charges', 'invoice_charges' => 'Invoice Charges',
'invitation_status' => [ 'invitation_status_sent' => 'Email Sent',
'sent' => 'Email Sent', 'invitation_status_opened' => 'Email Openend',
'opened' => 'Email Openend', 'invitation_status_viewed' => 'Invoice Viewed',
'viewed' => 'Invoice Viewed',
],
'notification_invoice_bounced' => 'We were unable to deliver Invoice :invoice to :contact.', 'notification_invoice_bounced' => 'We were unable to deliver Invoice :invoice to :contact.',
'notification_invoice_bounced_subject' => 'Unable to deliver Invoice :invoice', 'notification_invoice_bounced_subject' => 'Unable to deliver Invoice :invoice',
'notification_quote_bounced' => 'We were unable to deliver Quote :invoice to :contact.', 'notification_quote_bounced' => 'We were unable to deliver Quote :invoice to :contact.',
@ -923,14 +909,12 @@ return array(
'no_mapper' => 'No valid mapping for file', 'no_mapper' => 'No valid mapping for file',
'invalid_csv_header' => 'Invalid CSV Header', 'invalid_csv_header' => 'Invalid CSV Header',
'email_errors' => [ 'email_error_inactive_client' => 'Emails can not be sent to inactive clients',
'inactive_client' => 'Emails can not be sent to inactive clients', 'email_error_inactive_contact' => 'Emails can not be sent to inactive contacts',
'inactive_contact' => 'Emails can not be sent to inactive contacts', 'email_error_inactive_invoice' => 'Emails can not be sent to inactive invoices',
'inactive_invoice' => 'Emails can not be sent to inactive invoices', 'email_error_user_unregistered' => 'Please register your account to send emails',
'user_unregistered' => 'Please register your account to send emails', 'email_error_user_unconfirmed' => 'Please confirm your account to send emails',
'user_unconfirmed' => 'Please confirm your account to send emails', 'email_error_invalid_contact_email' => 'Invalid contact email',
'invalid_contact_email' => 'Invalid contact email',
],
'client_portal' => 'Client Portal', 'client_portal' => 'Client Portal',
'admin' => 'Admin', 'admin' => 'Admin',
@ -984,7 +968,7 @@ return array(
'email_designs' => 'Email Designs', 'email_designs' => 'Email Designs',
'assigned_when_sent' => 'Assigned when sent', 'assigned_when_sent' => 'Assigned when sent',
'white_label_custom_css' => ':link for $'.WHITE_LABEL_PRICE.' to enable custom styling and help support our project.', 'white_label_custom_css' => ':link for $:price to enable custom styling and help support our project.',
'white_label_purchase_link' => 'Purchase a white label license', 'white_label_purchase_link' => 'Purchase a white label license',
// Expense / vendor // Expense / vendor
@ -1091,7 +1075,7 @@ return array(
'archived_bank_account' => 'Successfully archived bank account', 'archived_bank_account' => 'Successfully archived bank account',
'created_bank_account' => 'Successfully created bank account', 'created_bank_account' => 'Successfully created bank account',
'validate_bank_account' => 'Validate Bank Account', 'validate_bank_account' => 'Validate Bank Account',
'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href="'.OFX_HOME_URL.'" target="_blank">400+ US banks.</a>', 'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href=":link" target="_blank">400+ US banks.</a>',
'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.', 'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.',
'bank_password_warning' => 'Warning: your password may be transmitted in plain text, consider enabling HTTPS.', 'bank_password_warning' => 'Warning: your password may be transmitted in plain text, consider enabling HTTPS.',
'username' => 'Username', 'username' => 'Username',
@ -1126,7 +1110,7 @@ return array(
'trial_call_to_action' => 'Start Free Trial', 'trial_call_to_action' => 'Start Free Trial',
'trial_success' => 'Successfully enabled two week free pro plan trial', 'trial_success' => 'Successfully enabled two week free pro plan trial',
'overdue' => 'Overdue', 'overdue' => 'Overdue',
'white_label_text' => 'Purchase a ONE YEAR white label license for $'.WHITE_LABEL_PRICE.' to remove the Invoice Ninja branding from the client portal and help support our project.', 'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding from the client portal and help support our project.',
'navigation' => 'Navigation', 'navigation' => 'Navigation',
'list_invoices' => 'List Invoices', 'list_invoices' => 'List Invoices',
@ -1157,14 +1141,14 @@ return array(
'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.', 'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.',
'send_portal_password'=>'Generate password automatically', 'send_portal_password'=>'Generate password automatically',
'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.', 'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.',
'expired' => 'Expired', 'expired' => 'Expired',
'invalid_card_number' => 'The credit card number is not valid.', 'invalid_card_number' => 'The credit card number is not valid.',
'invalid_expiry' => 'The expiration date is not valid.', 'invalid_expiry' => 'The expiration date is not valid.',
'invalid_cvv' => 'The CVV is not valid.', 'invalid_cvv' => 'The CVV is not valid.',
'cost' => 'Cost', 'cost' => 'Cost',
'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.', 'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.',
// User Permissions // User Permissions
'owner' => 'Owner', 'owner' => 'Owner',
'administrator' => 'Administrator', 'administrator' => 'Administrator',
@ -1182,8 +1166,8 @@ return array(
'create_all_help' => 'Allow user to create and modify records', 'create_all_help' => 'Allow user to create and modify records',
'view_all_help' => 'Allow user to view records they didn\'t create', 'view_all_help' => 'Allow user to view records they didn\'t create',
'edit_all_help' => 'Allow user to modify records they didn\'t create', 'edit_all_help' => 'Allow user to modify records they didn\'t create',
'view_payment' => 'View Payment', 'view_payment' => 'View Payment',
'january' => 'January', 'january' => 'January',
'february' => 'February', 'february' => 'February',
'march' => 'March', 'march' => 'March',
@ -1209,17 +1193,15 @@ return array(
'document_email_attachment' => 'Attach Documents', 'document_email_attachment' => 'Attach Documents',
'download_documents' => 'Download Documents (:size)', 'download_documents' => 'Download Documents (:size)',
'documents_from_expenses' => 'From Expenses:', 'documents_from_expenses' => 'From Expenses:',
'dropzone' => array(// See http://www.dropzonejs.com/#config-dictDefaultMessage 'dropzone_default_message' => 'Drop files or click to upload',
'DefaultMessage' => 'Drop files or click to upload', 'dropzone_fallback_message' => 'Your browser does not support drag\'n\'drop file uploads.',
'FallbackMessage' => 'Your browser does not support drag\'n\'drop file uploads.', 'dropzone_fallback_text' => 'Please use the fallback form below to upload your files like in the olden days.',
'FallbackText' => 'Please use the fallback form below to upload your files like in the olden days.', 'dropzone_file_too_big' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.',
'FileTooBig' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.', 'dropzone_invalid_file_type' => 'You can\'t upload files of this type.',
'InvalidFileType' => 'You can\'t upload files of this type.', 'dropzone_response_error' => 'Server responded with {{statusCode}} code.',
'ResponseError' => 'Server responded with {{statusCode}} code.', 'dropzone_cancel_upload' => 'Cancel upload',
'CancelUpload' => 'Cancel upload', 'dropzone_cancel_upload_confirmation' => 'Are you sure you want to cancel this upload?',
'CancelUploadConfirmation' => 'Are you sure you want to cancel this upload?', 'dropzone_remove_file' => 'Remove file',
'RemoveFile' => 'Remove file',
),
'documents' => 'Documents', 'documents' => 'Documents',
'document_date' => 'Document Date', 'document_date' => 'Document Date',
'document_size' => 'Size', 'document_size' => 'Size',
@ -1228,11 +1210,11 @@ return array(
'enable_client_portal_help' => 'Show/hide the client portal.', 'enable_client_portal_help' => 'Show/hide the client portal.',
'enable_client_portal_dashboard' => 'Dashboard', 'enable_client_portal_dashboard' => 'Dashboard',
'enable_client_portal_dashboard_help' => 'Show/hide the dashboard page in the client portal.', 'enable_client_portal_dashboard_help' => 'Show/hide the dashboard page in the client portal.',
// Plans // Plans
'account_management' => 'Account Management', 'account_management' => 'Account Management',
'plan_status' => 'Plan Status', 'plan_status' => 'Plan Status',
'plan_upgrade' => 'Upgrade', 'plan_upgrade' => 'Upgrade',
'plan_change' => 'Change Plan', 'plan_change' => 'Change Plan',
'pending_change_to' => 'Changes To', 'pending_change_to' => 'Changes To',
@ -1262,9 +1244,9 @@ return array(
'plan_paid' => 'Term Started', 'plan_paid' => 'Term Started',
'plan_started' => 'Plan Started', 'plan_started' => 'Plan Started',
'plan_expires' => 'Plan Expires', 'plan_expires' => 'Plan Expires',
'white_label_button' => 'White Label', 'white_label_button' => 'White Label',
'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_year_description' => 'One year enrollment in the Invoice Ninja Pro Plan.',
'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.', 'pro_plan_month_description' => 'One month enrollment in the Invoice Ninja Pro Plan.',
'enterprise_plan_product' => 'Enterprise Plan', 'enterprise_plan_product' => 'Enterprise Plan',
@ -1284,5 +1266,5 @@ return array(
'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.', 'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.',
'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.', 'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments.',
'return_to_app' => 'Return to app', 'return_to_app' => 'Return to app',
); );

View File

@ -2,7 +2,7 @@
@section('head') @section('head')
@parent @parent
@include('money_script') @include('money_script')
<style type="text/css"> <style type="text/css">
@ -37,7 +37,7 @@
->data_bind('combobox: bank_id') ->data_bind('combobox: bank_id')
->addOption('', '') ->addOption('', '')
->fromQuery($banks, 'name', 'id') ->fromQuery($banks, 'name', 'id')
->blockHelp('texts.bank_accounts_help') !!} ->blockHelp(trans('texts.bank_accounts_help', ['link' => OFX_HOME_URL])) !!}
@endif @endif
{!! Former::password('bank_username') {!! Former::password('bank_username')
@ -70,7 +70,7 @@
<td data-bind="text: masked_account_number"></td> <td data-bind="text: masked_account_number"></td>
<td data-bind="text: balance"></td> <td data-bind="text: balance"></td>
<td style="text-align:center"> <td style="text-align:center">
<input type="checkbox" value="1" <input type="checkbox" value="1"
data-bind="checked: includeAccount, attr: {name: 'bank_accounts[' + $index() + '][include]'}"/> data-bind="checked: includeAccount, attr: {name: 'bank_accounts[' + $index() + '][include]'}"/>
</td> </td>
</tr> </tr>
@ -110,19 +110,19 @@
<tbody data-bind="foreach: filteredTransactions"> <tbody data-bind="foreach: filteredTransactions">
<tr> <tr>
<td style="text-align:center"> <td style="text-align:center">
<input type="checkbox" value="1" <input type="checkbox" value="1"
data-bind="checked: includeTransaction, attr: {name: 'bank_accounts[' + $index() + '][include]'}"/> data-bind="checked: includeTransaction, attr: {name: 'bank_accounts[' + $index() + '][include]'}"/>
</td> </td>
<td> <td>
<input type="text" class="form-control" <input type="text" class="form-control"
data-bind="value: vendor.pretty, valueUpdate: 'afterkeydown'"/> data-bind="value: vendor.pretty, valueUpdate: 'afterkeydown'"/>
</td> </td>
<td> <td>
<input type="text" class="form-control" <input type="text" class="form-control"
data-bind="value: info, valueUpdate: 'afterkeydown'"/> data-bind="value: info, valueUpdate: 'afterkeydown'"/>
</td> </td>
<td> <td>
<input type="text" class="form-control" <input type="text" class="form-control"
data-bind="value: memo, valueUpdate: 'afterkeydown'"/> data-bind="value: memo, valueUpdate: 'afterkeydown'"/>
</td> </td>
<td data-bind="text: date" nowrap></td> <td data-bind="text: date" nowrap></td>
@ -162,7 +162,7 @@
<p/>&nbsp;<p/> <p/>&nbsp;<p/>
{!! Former::actions( {!! Former::actions(
count(Cache::get('banks')) > 0 ? count(Cache::get('banks')) > 0 ?
Button::normal(trans('texts.cancel')) Button::normal(trans('texts.cancel'))
->withAttributes([ ->withAttributes([
'data-bind' => 'visible: !importResults()', 'data-bind' => 'visible: !importResults()',
@ -308,9 +308,9 @@
} }
} }
} }
}, },
owner: self owner: self
}) })
self.amount.pretty = ko.computed({ self.amount.pretty = ko.computed({
@ -351,7 +351,7 @@
self.filteredTransactions = ko.computed(function() { self.filteredTransactions = ko.computed(function() {
if (!model.filter()) { if (!model.filter()) {
return self.transactions(); return self.transactions();
} else { } else {
return ko.utils.arrayFilter(self.transactions(), function(transaction) { return ko.utils.arrayFilter(self.transactions(), function(transaction) {
return transaction.isMatch(model.filter()); return transaction.isMatch(model.filter());
@ -478,11 +478,16 @@
return self.countExpenses() == 0; return self.countExpenses() == 0;
}, self); }, self);
}; };
window.model = new ViewModel(); window.model = new ViewModel();
ko.applyBindings(model); ko.applyBindings(model);
@if (!empty($transactions))
loadTransactions({!! $transactions !!});
model.setPage('import');
@endif
</script> </script>
@stop @stop

View File

@ -1,31 +1,35 @@
@extends('header') @extends('header')
@section('content') @section('content')
@parent @parent
@include('accounts.nav', ['selected' => ACCOUNT_BANKS]) @include('accounts.nav', ['selected' => ACCOUNT_BANKS])
{!! Button::primary(trans('texts.add_bank_account')) <div class="pull-right">
{!! Button::normal(trans('texts.import_ofx'))
->asLinkTo(URL::to('/bank_accounts/import_ofx'))
->appendIcon(Icon::create('open')) !!}
{!! Button::primary(trans('texts.add_bank_account'))
->asLinkTo(URL::to('/bank_accounts/create')) ->asLinkTo(URL::to('/bank_accounts/create'))
->withAttributes(['class' => 'pull-right'])
->appendIcon(Icon::create('plus-sign')) !!} ->appendIcon(Icon::create('plus-sign')) !!}
</div>
@include('partials.bulk_form', ['entityType' => ENTITY_BANK_ACCOUNT]) @include('partials.bulk_form', ['entityType' => ENTITY_BANK_ACCOUNT])
{!! Datatable::table() {!! Datatable::table()
->addColumn( ->addColumn(
trans('texts.name'), trans('texts.name'),
trans('texts.integration_type'), trans('texts.integration_type'),
trans('texts.action')) trans('texts.action'))
->setUrl(url('api/bank_accounts/')) ->setUrl(url('api/bank_accounts/'))
->setOptions('sPaginationType', 'bootstrap') ->setOptions('sPaginationType', 'bootstrap')
->setOptions('bFilter', false) ->setOptions('bFilter', false)
->setOptions('bAutoWidth', false) ->setOptions('bAutoWidth', false)
->setOptions('aoColumns', [[ "sWidth"=> "50%" ], [ "sWidth"=> "30%" ], ["sWidth"=> "20%"]]) ->setOptions('aoColumns', [[ "sWidth"=> "50%" ], [ "sWidth"=> "30%" ], ["sWidth"=> "20%"]])
->setOptions('aoColumnDefs', [['bSortable'=>false, 'aTargets'=>[2]]]) ->setOptions('aoColumnDefs', [['bSortable'=>false, 'aTargets'=>[2]]])
->render('datatable') !!} ->render('datatable') !!}
<script> <script>
window.onDatatableReady = actionListHandler; window.onDatatableReady = actionListHandler;
</script> </script>
@stop @stop

View File

@ -6,7 +6,7 @@
<link href='https://fonts.googleapis.com/css?family=Roboto+Mono' rel='stylesheet' type='text/css'> <link href='https://fonts.googleapis.com/css?family=Roboto+Mono' rel='stylesheet' type='text/css'>
@stop @stop
@section('content') @section('content')
@parent @parent
{!! Former::open_for_files() {!! Former::open_for_files()
@ -21,7 +21,7 @@
@if (!Utils::isNinja() && !Auth::user()->account->hasFeature(FEATURE_WHITE_LABEL)) @if (!Utils::isNinja() && !Auth::user()->account->hasFeature(FEATURE_WHITE_LABEL))
<div class="alert alert-warning" style="font-size:larger;"> <div class="alert alert-warning" style="font-size:larger;">
<center> <center>
{!! trans('texts.white_label_custom_css', ['link'=>'<a href="#" onclick="$(\'#whiteLabelModal\').modal(\'show\');">'.trans('texts.white_label_purchase_link').'</a>']) !!} {!! trans('texts.white_label_custom_css', ['price' => WHITE_LABEL_PRICE, 'link'=>'<a href="#" onclick="$(\'#whiteLabelModal\').modal(\'show\');">'.trans('texts.white_label_purchase_link').'</a>']) !!}
</center> </center>
</div> </div>
@endif @endif
@ -92,5 +92,5 @@
$('#send_portal_password').prop('disabled', !checked); $('#send_portal_password').prop('disabled', !checked);
} }
fixCheckboxes(); fixCheckboxes();
</script> </script>
@stop @stop

View File

@ -0,0 +1,30 @@
@extends('header')
@section('content')
@parent
@include('accounts.nav', ['selected' => ACCOUNT_BANKS])
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">{{ trans('texts.import_ofx') }}</h3>
</div>
<div class="panel-body">
{!! Former::open_for_files('bank_accounts/import_ofx')
->rules(['ofx_file' => 'required'])
->addClass('warn-on-exit') !!}
{!! Former::file("ofx_file") !!}
</div>
</div>
{!! Former::actions(
Button::normal(trans('texts.cancel'))->large()->asLinkTo(URL::to('settings/bank_accounts'))->appendIcon(Icon::create('remove-circle')),
Button::success(trans('texts.upload'))->submit()->large()->appendIcon(Icon::create('open'))
) !!}
{!! Former::close() !!}
@stop

View File

@ -1,7 +1,7 @@
@if (!Utils::isPro() && isset($advanced) && $advanced) @if (!Utils::isPro() && isset($advanced) && $advanced)
<div class="alert alert-warning" style="font-size:larger;"> <div class="alert alert-warning" style="font-size:larger;">
<center> <center>
{!! trans('texts.pro_plan_advanced_settings', ['link'=>'<a href="#" onclick="showProPlan(\''.$selected.'\')">'.trans('texts.pro_plan.remove_logo_link').'</a>']) !!} {!! trans('texts.pro_plan_advanced_settings', ['link'=>'<a href="#" onclick="showProPlan(\''.$selected.'\')">'.trans('texts.pro_plan_remove_logo_link').'</a>']) !!}
</center> </center>
</div> </div>
@endif @endif
@ -22,11 +22,11 @@
</div> </div>
<div class="list-group"> <div class="list-group">
@foreach ($settings as $section) @foreach ($settings as $section)
<a href="{{ URL::to("settings/{$section}") }}" class="list-group-item {{ $selected === $section ? 'selected' : '' }}" <a href="{{ URL::to("settings/{$section}") }}" class="list-group-item {{ $selected === $section ? 'selected' : '' }}"
style="width:100%;text-align:left">{{ trans("texts.{$section}") }}</a> style="width:100%;text-align:left">{{ trans("texts.{$section}") }}</a>
@endforeach @endforeach
@if ($type === ADVANCED_SETTINGS && !Utils::isNinjaProd()) @if ($type === ADVANCED_SETTINGS && !Utils::isNinjaProd())
<a href="{{ URL::to("settings/system_settings") }}" class="list-group-item {{ $selected === 'system_settings' ? 'selected' : '' }}" <a href="{{ URL::to("settings/system_settings") }}" class="list-group-item {{ $selected === 'system_settings' ? 'selected' : '' }}"
style="width:100%;text-align:left">{{ trans("texts.system_settings") }}</a> style="width:100%;text-align:left">{{ trans("texts.system_settings") }}</a>
@endif @endif
</div> </div>
@ -34,4 +34,4 @@
@endforeach @endforeach
</div> </div>
<div class="col-md-9"> <div class="col-md-9">

View File

@ -21,6 +21,6 @@
</div> </div>
&nbsp; &nbsp;
<div> <div>
{{ trans('texts.reset_password_footer') }} {{ trans('texts.reset_password_footer', ['email' => CONTACT_EMAIL]) }}
</div> </div>
@stop @stop

View File

@ -8,4 +8,4 @@
{!! trans('texts.email_signature') !!} {!! trans('texts.email_signature') !!}
{!! trans('texts.email_from') !!} {!! trans('texts.email_from') !!}
{!! trans('texts.user_email_footer') !!} {!! trans('texts.user_email_footer', ['link' => URL::to('/settings/notifications')]) !!}

View File

@ -5,4 +5,4 @@
{!! trans('texts.email_signature') !!} {!! trans('texts.email_signature') !!}
{!! trans('texts.email_from') !!} {!! trans('texts.email_from') !!}
{!! trans('texts.user_email_footer') !!} {!! trans('texts.user_email_footer', ['link' => URL::to('/settings/notifications')]) !!}

View File

@ -5,4 +5,4 @@
{!! trans('texts.email_signature') !!} {!! trans('texts.email_signature') !!}
{!! trans('texts.email_from') !!} {!! trans('texts.email_from') !!}
{!! trans('texts.user_email_footer') !!} {!! trans('texts.user_email_footer', ['link' => URL::to('/settings/notifications')]) !!}

View File

@ -21,6 +21,6 @@
</div> </div>
&nbsp; &nbsp;
<div> <div>
{{ trans('texts.reset_password_footer') }} {{ trans('texts.reset_password_footer', ['email' => CONTACT_EMAIL]) }}
</div> </div>
@stop @stop

View File

@ -5,4 +5,4 @@
{!! trans('texts.email_signature') !!} {!! trans('texts.email_signature') !!}
{!! trans('texts.email_from') !!} {!! trans('texts.email_from') !!}
{!! trans('texts.user_email_footer') !!} {!! trans('texts.user_email_footer', ['link' => URL::to('/settings/notifications')]) !!}

View File

@ -14,7 +14,7 @@
@stop @stop
@section('content') @section('content')
{!! Former::open($url)->addClass('warn-on-exit main-form')->method($method) !!} {!! Former::open($url)->addClass('warn-on-exit main-form')->method($method) !!}
<div style="display:none"> <div style="display:none">
{!! Former::text('action') !!} {!! Former::text('action') !!}
@ -216,13 +216,13 @@
@else @else
$('#amount').focus(); $('#amount').focus();
@endif @endif
@if (Auth::user()->account->isPro()) @if (Auth::user()->account->hasFeature(FEATURE_DOCUMENTS))
$('.main-form').submit(function(){ $('.main-form').submit(function(){
if($('#document-upload .fallback input').val())$(this).attr('enctype', 'multipart/form-data') if($('#document-upload .fallback input').val())$(this).attr('enctype', 'multipart/form-data')
else $(this).removeAttr('enctype') else $(this).removeAttr('enctype')
}) })
// Initialize document upload // Initialize document upload
dropzone = new Dropzone('#document-upload', { dropzone = new Dropzone('#document-upload', {
url:{!! json_encode(url('document')) !!}, url:{!! json_encode(url('document')) !!},
@ -231,8 +231,8 @@
}, },
acceptedFiles:{!! json_encode(implode(',',\App\Models\Document::$allowedMimes)) !!}, acceptedFiles:{!! json_encode(implode(',',\App\Models\Document::$allowedMimes)) !!},
addRemoveLinks:true, addRemoveLinks:true,
@foreach(trans('texts.dropzone') as $key=>$text) @foreach(['default_message', 'fallback_message', 'fallback_text', 'file_too_big', 'invalid_file_type', 'response_error', 'cancel_upload', 'cancel_upload_confirmation', 'remove_file'] as $key)
"dict{{strval($key)}}":"{{strval($text)}}", "dict{{strval($key)}}":"{{trans('texts.dropzone_'.Utils::toClassCase($key))}}",
@endforeach @endforeach
maxFileSize:{{floatval(MAX_DOCUMENT_SIZE/1000)}}, maxFileSize:{{floatval(MAX_DOCUMENT_SIZE/1000)}},
}); });
@ -286,7 +286,7 @@
} }
} }
} }
if (data) { if (data) {
ko.mapping.fromJS(data, self.mapping, this); ko.mapping.fromJS(data, self.mapping, this);
} }
@ -327,11 +327,11 @@
} }
var expenseCurrencyId = self.expense_currency_id() || self.account_currency_id(); var expenseCurrencyId = self.expense_currency_id() || self.account_currency_id();
var invoiceCurrencyId = self.invoice_currency_id() || self.account_currency_id(); var invoiceCurrencyId = self.invoice_currency_id() || self.account_currency_id();
return expenseCurrencyId != invoiceCurrencyId return expenseCurrencyId != invoiceCurrencyId
|| invoiceCurrencyId != self.account_currency_id() || invoiceCurrencyId != self.account_currency_id()
|| expenseCurrencyId != self.account_currency_id(); || expenseCurrencyId != self.account_currency_id();
}) })
self.addDocument = function() { self.addDocument = function() {
var documentModel = new DocumentModel(); var documentModel = new DocumentModel();
self.documents.push(documentModel); self.documents.push(documentModel);
@ -359,9 +359,9 @@
if (data) { if (data) {
self.update(data); self.update(data);
} }
} }
@if (Auth::user()->account->hasFeature(FEATURE_DOCUMENTS)) @if (Auth::user()->account->hasFeature(FEATURE_DOCUMENTS))
function handleDocumentAdded(file){ function handleDocumentAdded(file){
if(file.mock)return; if(file.mock)return;
@ -384,4 +384,4 @@
@endif @endif
</script> </script>
@stop @stop

View File

@ -4,25 +4,25 @@
@section('head') @section('head')
<link href="//fonts.googleapis.com/css?family=Roboto:400,700,900,100|Roboto+Slab:400,300,700&subset=latin,latin-ext" rel="stylesheet" type="text/css"> <link href="//fonts.googleapis.com/css?family=Roboto:400,700,900,100|Roboto+Slab:400,300,700&subset=latin,latin-ext" rel="stylesheet" type="text/css">
<link href="{{ asset('css/built.css') }}?no_cache={{ NINJA_VERSION }}" rel="stylesheet" type="text/css"/> <link href="{{ asset('css/built.css') }}?no_cache={{ NINJA_VERSION }}" rel="stylesheet" type="text/css"/>
<style type="text/css"> <style type="text/css">
body { body {
background-color: #EEEEEE; background-color: #EEEEEE;
padding-top: 114px; padding-top: 114px;
} }
/* Fix for header covering stuff when the screen is narrower */ /* Fix for header covering stuff when the screen is narrower */
@media screen and (min-width: 1200px) { @media screen and (min-width: 1200px) {
body { body {
padding-top: 56px; padding-top: 56px;
} }
} }
@media screen and (max-width: 768px) { @media screen and (max-width: 768px) {
body { body {
padding-top: 56px; padding-top: 56px;
} }
} }
@ -53,12 +53,12 @@
} }
@if (!Auth::check() || !Auth::user()->registered) @if (!Auth::check() || !Auth::user()->registered)
function validateSignUp(showError) function validateSignUp(showError)
{ {
var isFormValid = true; var isFormValid = true;
$(['first_name','last_name','email','password']).each(function(i, field) { $(['first_name','last_name','email','password']).each(function(i, field) {
var $input = $('form.signUpForm #new_'+field), var $input = $('form.signUpForm #new_'+field),
val = $.trim($input.val()); val = $.trim($input.val());
var isValid = val && val.length >= (field == 'password' ? 6 : 1); var isValid = val && val.length >= (field == 'password' ? 6 : 1);
if (isValid && field == 'email') { if (isValid && field == 'email') {
isValid = isValidEmailAddress(val); isValid = isValidEmailAddress(val);
@ -96,8 +96,8 @@
type: 'POST', type: 'POST',
url: '{{ URL::to('signup/validate') }}', url: '{{ URL::to('signup/validate') }}',
data: 'email=' + $('form.signUpForm #new_email').val(), data: 'email=' + $('form.signUpForm #new_email').val(),
success: function(result) { success: function(result) {
if (result == 'available') { if (result == 'available') {
submitSignUp(); submitSignUp();
} else { } else {
$('#errorTaken').show(); $('#errorTaken').show();
@ -106,19 +106,19 @@
$('#working').hide(); $('#working').hide();
} }
} }
}); });
} }
function submitSignUp() { function submitSignUp() {
$.ajax({ $.ajax({
type: 'POST', type: 'POST',
url: '{{ URL::to('signup/submit') }}', url: '{{ URL::to('signup/submit') }}',
data: 'new_email=' + encodeURIComponent($('form.signUpForm #new_email').val()) + data: 'new_email=' + encodeURIComponent($('form.signUpForm #new_email').val()) +
'&new_password=' + encodeURIComponent($('form.signUpForm #new_password').val()) + '&new_password=' + encodeURIComponent($('form.signUpForm #new_password').val()) +
'&new_first_name=' + encodeURIComponent($('form.signUpForm #new_first_name').val()) + '&new_first_name=' + encodeURIComponent($('form.signUpForm #new_first_name').val()) +
'&new_last_name=' + encodeURIComponent($('form.signUpForm #new_last_name').val()) + '&new_last_name=' + encodeURIComponent($('form.signUpForm #new_last_name').val()) +
'&go_pro=' + $('#go_pro').val(), '&go_pro=' + $('#go_pro').val(),
success: function(result) { success: function(result) {
if (result) { if (result) {
handleSignedUp(); handleSignedUp();
NINJA.isRegistered = true; NINJA.isRegistered = true;
@ -142,7 +142,7 @@
function checkForEnter(event) function checkForEnter(event)
{ {
if (event.keyCode === 13){ if (event.keyCode === 13){
event.preventDefault(); event.preventDefault();
validateServerSignUp(); validateServerSignUp();
return false; return false;
} }
@ -154,10 +154,10 @@
NINJA.formIsChanged = false; NINJA.formIsChanged = false;
} }
if (force || NINJA.isRegistered) { if (force || NINJA.isRegistered) {
window.location = '{{ URL::to('logout') }}'; window.location = '{{ URL::to('logout') }}';
} else { } else {
$('#logoutModal').modal('show'); $('#logoutModal').modal('show');
} }
} }
@ -197,7 +197,7 @@
window.location = '/settings/account_management#changePlanModel'; window.location = '/settings/account_management#changePlanModel';
} }
} else { } else {
$('#proPlanModal').modal('hide'); $('#proPlanModal').modal('hide');
$('#go_pro').val('true'); $('#go_pro').val('true');
showSignUp(); showSignUp();
} }
@ -262,7 +262,7 @@
$('#navbar-options').hide(); $('#navbar-options').hide();
$('#search-form').show(); $('#search-form').show();
$('#search').focus(); $('#search').focus();
if (!window.loadedSearchData) { if (!window.loadedSearchData) {
trackEvent('/activity', '/search'); trackEvent('/activity', '/search');
$.get('{{ URL::route('getSearchData') }}', function(data) { $.get('{{ URL::route('getSearchData') }}', function(data) {
@ -279,7 +279,7 @@
templates: { templates: {
header: '&nbsp;<span style="font-weight:600;font-size:16px">{{ Auth::user()->account->custom_client_label1 }}</span>' header: '&nbsp;<span style="font-weight:600;font-size:16px">{{ Auth::user()->account->custom_client_label1 }}</span>'
} }
} }
@endif @endif
@if (Auth::check() && Auth::user()->account->custom_client_label2) @if (Auth::check() && Auth::user()->account->custom_client_label2)
,{ ,{
@ -290,7 +290,7 @@
templates: { templates: {
header: '&nbsp;<span style="font-weight:600;font-size:16px">{{ Auth::user()->account->custom_client_label2 }}</span>' header: '&nbsp;<span style="font-weight:600;font-size:16px">{{ Auth::user()->account->custom_client_label2 }}</span>'
} }
} }
@endif @endif
@foreach (['clients', 'contacts', 'invoices', 'quotes', 'navigation'] as $type) @foreach (['clients', 'contacts', 'invoices', 'quotes', 'navigation'] as $type)
,{ ,{
@ -305,19 +305,19 @@
@endforeach @endforeach
).on('typeahead:selected', function(element, datum, name) { ).on('typeahead:selected', function(element, datum, name) {
window.location = datum.url; window.location = datum.url;
}).focus(); }).focus();
window.loadedSearchData = true; window.loadedSearchData = true;
}); });
} }
} }
function hideSearch() { function hideSearch() {
$('#search-form').hide(); $('#search-form').hide();
$('#navbar-options').show(); $('#navbar-options').show();
} }
$(function() { $(function() {
window.setTimeout(function() { window.setTimeout(function() {
$(".alert-hide").fadeOut(); $(".alert-hide").fadeOut();
}, 3000); }, 3000);
@ -341,7 +341,7 @@
$(['first_name','last_name','email','password']).each(function(i, field) { $(['first_name','last_name','email','password']).each(function(i, field) {
var $input = $('form.signUpForm #new_'+field); var $input = $('form.signUpForm #new_'+field);
if (!$input.val()) { if (!$input.val()) {
$input.focus(); $input.focus();
return false; return false;
} }
}); });
@ -350,7 +350,7 @@
@if (Auth::check() && !Utils::isNinja() && !Auth::user()->registered) @if (Auth::check() && !Utils::isNinja() && !Auth::user()->registered)
$('#closeSignUpButton').hide(); $('#closeSignUpButton').hide();
showSignUp(); showSignUp();
@elseif(Session::get('sign_up') || Input::get('sign_up')) @elseif(Session::get('sign_up') || Input::get('sign_up'))
showSignUp(); showSignUp();
@endif @endif
@ -385,7 +385,7 @@
}); });
</script> </script>
@stop @stop
@ -404,7 +404,7 @@
<a href="{{ URL::to(NINJA_WEB_URL) }}" class='navbar-brand' target="_blank"> <a href="{{ URL::to(NINJA_WEB_URL) }}" class='navbar-brand' target="_blank">
{{-- Per our license, please do not remove or modify this link. --}} {{-- Per our license, please do not remove or modify this link. --}}
<img src="{{ asset('images/invoiceninja-logo.png') }}" style="height:20px;width:auto;padding-right:10px"/> <img src="{{ asset('images/invoiceninja-logo.png') }}" style="height:20px;width:auto;padding-right:10px"/>
</a> </a>
</div> </div>
<div class="collapse navbar-collapse" id="navbar-collapse-1"> <div class="collapse navbar-collapse" id="navbar-collapse-1">
@ -437,9 +437,9 @@
@endif @endif
<span class="caret"></span> <span class="caret"></span>
</div> </div>
<span class="glyphicon glyphicon-user nav-account-icon" style="padding-left:0px" <span class="glyphicon glyphicon-user nav-account-icon" style="padding-left:0px"
title="{{ Auth::user()->account->getDisplayName() }}"/> title="{{ Auth::user()->account->getDisplayName() }}"/>
</button> </button>
<ul class="dropdown-menu user-accounts"> <ul class="dropdown-menu user-accounts">
@if (session(SESSION_USER_ACCOUNTS)) @if (session(SESSION_USER_ACCOUNTS))
@foreach (session(SESSION_USER_ACCOUNTS) as $item) @foreach (session(SESSION_USER_ACCOUNTS) as $item)
@ -468,12 +468,12 @@
@endforeach @endforeach
@else @else
@include('user_account', [ @include('user_account', [
'account_name' => Auth::user()->account->name ?: trans('texts.untitled'), 'account_name' => Auth::user()->account->name ?: trans('texts.untitled'),
'user_name' => Auth::user()->getDisplayName(), 'user_name' => Auth::user()->getDisplayName(),
'logo_url' => Auth::user()->account->getLogoURL(), 'logo_url' => Auth::user()->account->getLogoURL(),
'selected' => true, 'selected' => true,
]) ])
@endif @endif
<li class="divider"></li> <li class="divider"></li>
@if (Utils::isAdmin()) @if (Utils::isAdmin())
@if (count(session(SESSION_USER_ACCOUNTS)) > 1) @if (count(session(SESSION_USER_ACCOUNTS)) > 1)
@ -486,9 +486,9 @@
</ul> </ul>
</div> </div>
</div> </div>
<ul class="nav navbar-nav navbar-right navbar-settings"> <ul class="nav navbar-nav navbar-right navbar-settings">
<li class="dropdown"> <li class="dropdown">
@if (Utils::isAdmin()) @if (Utils::isAdmin())
<a href="{{ URL::to('/settings') }}" class="dropdown-toggle"> <a href="{{ URL::to('/settings') }}" class="dropdown-toggle">
@ -509,18 +509,18 @@
</ul> </ul>
<ul class="nav navbar-nav navbar-right navbar-search"> <ul class="nav navbar-nav navbar-right navbar-search">
<li class="dropdown"> <li class="dropdown">
<a href="#" onclick="showSearch()"> <a href="#" onclick="showSearch()">
<span class="glyphicon glyphicon-search" title="{{ trans('texts.search') }}"/> <span class="glyphicon glyphicon-search" title="{{ trans('texts.search') }}"/>
</a> </a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
@if (count(Session::get(RECENTLY_VIEWED)) == 0) @if (count(Session::get(RECENTLY_VIEWED)) == 0)
<li><a href="#">{{ trans('texts.no_items') }}</a></li> <li><a href="#">{{ trans('texts.no_items') }}</a></li>
@else @else
@foreach (Session::get(RECENTLY_VIEWED) as $link) @foreach (Session::get(RECENTLY_VIEWED) as $link)
@if (property_exists($link, 'accountId') && $link->accountId == Auth::user()->account_id) @if (property_exists($link, 'accountId') && $link->accountId == Auth::user()->account_id)
<li><a href="{{ $link->url }}">{{ $link->name }}</a></li> <li><a href="{{ $link->url }}">{{ $link->name }}</a></li>
@endif @endif
@endforeach @endforeach
@endif @endif
@ -531,12 +531,12 @@
<form id="search-form" class="navbar-form navbar-right" role="search" style="display:none"> <form id="search-form" class="navbar-form navbar-right" role="search" style="display:none">
<div class="form-group"> <div class="form-group">
<input type="text" id="search" style="width: 240px;padding-top:0px;padding-bottom:0px" <input type="text" id="search" style="width: 240px;padding-top:0px;padding-bottom:0px"
class="form-control" placeholder="{{ trans('texts.search') . ': ' . trans('texts.search_hotkey')}}"> class="form-control" placeholder="{{ trans('texts.search') . ': ' . trans('texts.search_hotkey')}}">
</div> </div>
</form> </form>
</div><!-- /.navbar-collapse --> </div><!-- /.navbar-collapse -->
@ -545,7 +545,7 @@
<br/> <br/>
<div class="container"> <div class="container">
@include('partials.warn_session', ['redirectTo' => '/dashboard']) @include('partials.warn_session', ['redirectTo' => '/dashboard'])
@if (Session::has('warning')) @if (Session::has('warning'))
@ -558,8 +558,8 @@
</div> </div>
@elseif (Session::has('news_feed_message')) @elseif (Session::has('news_feed_message'))
<div class="alert alert-info"> <div class="alert alert-info">
{!! Session::get('news_feed_message') !!} {!! Session::get('news_feed_message') !!}
<a href="#" onclick="hideMessage()" class="pull-right">{{ trans('texts.hide') }}</a> <a href="#" onclick="hideMessage()" class="pull-right">{{ trans('texts.hide') }}</a>
</div> </div>
@endif @endif
@ -571,7 +571,7 @@
{!! Form::breadcrumbs(isset($entityStatus) ? $entityStatus : '') !!} {!! Form::breadcrumbs(isset($entityStatus) ? $entityStatus : '') !!}
@endif @endif
@yield('content') @yield('content')
</div> </div>
@ -600,7 +600,7 @@
{!! Former::text('go_pro') !!} {!! Former::text('go_pro') !!}
</div> </div>
<div class="row signup-form"> <div class="row signup-form">
<div class="col-md-11 col-md-offset-1"> <div class="col-md-11 col-md-offset-1">
{!! Former::checkbox('terms_checkbox')->label(' ')->text(trans('texts.agree_to_terms', ['terms' => '<a href="'.URL::to('terms').'" target="_blank">'.trans('texts.terms_of_service').'</a>']))->raw() !!} {!! Former::checkbox('terms_checkbox')->label(' ')->text(trans('texts.agree_to_terms', ['terms' => '<a href="'.URL::to('terms').'" target="_blank">'.trans('texts.terms_of_service').'</a>']))->raw() !!}
@ -610,7 +610,7 @@
<div class="col-md-4 col-md-offset-1"> <div class="col-md-4 col-md-offset-1">
<h4>{{ trans('texts.sign_up_using') }}</h4><br/> <h4>{{ trans('texts.sign_up_using') }}</h4><br/>
@foreach (App\Services\AuthService::$providers as $provider) @foreach (App\Services\AuthService::$providers as $provider)
<a href="{{ URL::to('auth/' . $provider) }}" class="btn btn-primary btn-block" <a href="{{ URL::to('auth/' . $provider) }}" class="btn btn-primary btn-block"
onclick="setSocialLoginProvider('{{ strtolower($provider) }}')" id="{{ strtolower($provider) }}LoginButton"> onclick="setSocialLoginProvider('{{ strtolower($provider) }}')" id="{{ strtolower($provider) }}LoginButton">
<i class="fa fa-{{ strtolower($provider) }}"></i> &nbsp; <i class="fa fa-{{ strtolower($provider) }}"></i> &nbsp;
{{ $provider }} {{ $provider }}
@ -623,12 +623,12 @@
<div style="border-right:thin solid #CCCCCC;height:110px;width:8px;margin-top:10px;"></div> <div style="border-right:thin solid #CCCCCC;height:110px;width:8px;margin-top:10px;"></div>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
@else @else
<div class="col-md-12"> <div class="col-md-12">
@endif @endif
{{ Former::setOption('TwitterBootstrap3.labelWidths.large', 1) }} {{ Former::setOption('TwitterBootstrap3.labelWidths.large', 1) }}
{{ Former::setOption('TwitterBootstrap3.labelWidths.small', 1) }} {{ Former::setOption('TwitterBootstrap3.labelWidths.small', 1) }}
{!! Former::text('new_first_name') {!! Former::text('new_first_name')
->placeholder(trans('texts.first_name')) ->placeholder(trans('texts.first_name'))
->autocomplete('given-name') ->autocomplete('given-name')
@ -644,7 +644,7 @@
{!! Former::password('new_password') {!! Former::password('new_password')
->placeholder(trans('texts.password')) ->placeholder(trans('texts.password'))
->label(' ') !!} ->label(' ') !!}
{{ Former::setOption('TwitterBootstrap3.labelWidths.large', 4) }} {{ Former::setOption('TwitterBootstrap3.labelWidths.large', 4) }}
{{ Former::setOption('TwitterBootstrap3.labelWidths.small', 4) }} {{ Former::setOption('TwitterBootstrap3.labelWidths.small', 4) }}
</div> </div>
@ -655,9 +655,9 @@
</div> </div>
{!! Former::close() !!} {!! Former::close() !!}
<center><div id="errorTaken" style="display:none">&nbsp;<br/>{{ trans('texts.email_taken') }}</div></center> <center><div id="errorTaken" style="display:none">&nbsp;<br/>{{ trans('texts.email_taken') }}</div></center>
<br/> <br/>
@ -679,7 +679,7 @@
<br/>&nbsp; <br/>&nbsp;
</div> </div>
<div class="modal-footer" id="signUpFooter" style="margin-top: 0px"> <div class="modal-footer" id="signUpFooter" style="margin-top: 0px">
<button type="button" class="btn btn-default" id="closeSignUpButton" data-dismiss="modal">{{ trans('texts.close') }} <i class="glyphicon glyphicon-remove-circle"></i></button> <button type="button" class="btn btn-default" id="closeSignUpButton" data-dismiss="modal">{{ trans('texts.close') }} <i class="glyphicon glyphicon-remove-circle"></i></button>
<button type="button" class="btn btn-primary" id="saveSignUpButton" onclick="validateServerSignUp()" disabled>{{ trans('texts.save') }} <i class="glyphicon glyphicon-floppy-disk"></i></button> <button type="button" class="btn btn-primary" id="saveSignUpButton" onclick="validateServerSignUp()" disabled>{{ trans('texts.save') }} <i class="glyphicon glyphicon-floppy-disk"></i></button>
</div> </div>
@ -696,14 +696,14 @@
<h4 class="modal-title" id="myModalLabel">{{ trans('texts.logout') }}</h4> <h4 class="modal-title" id="myModalLabel">{{ trans('texts.logout') }}</h4>
</div> </div>
<div class="container"> <div class="container">
<h3>{{ trans('texts.are_you_sure') }}</h3> <h3>{{ trans('texts.are_you_sure') }}</h3>
<p>{{ trans('texts.erase_data') }}</p> <p>{{ trans('texts.erase_data') }}</p>
</div> </div>
<div class="modal-footer" id="signUpFooter"> <div class="modal-footer" id="signUpFooter">
<button type="button" class="btn btn-default" data-dismiss="modal">{{ trans('texts.cancel') }}</button> <button type="button" class="btn btn-default" data-dismiss="modal">{{ trans('texts.cancel') }}</button>
<button type="button" class="btn btn-primary" onclick="logout(true)">{{ trans('texts.logout') }}</button> <button type="button" class="btn btn-primary" onclick="logout(true)">{{ trans('texts.logout') }}</button>
</div> </div>
</div> </div>
</div> </div>
@ -717,7 +717,7 @@
<div class="pull-right"> <div class="pull-right">
<img onclick="hideProPlan()" class="close" src="{{ asset('images/pro_plan/close.png') }}"/> <img onclick="hideProPlan()" class="close" src="{{ asset('images/pro_plan/close.png') }}"/>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-7 left-side"> <div class="col-md-7 left-side">
@ -758,7 +758,7 @@
@if (Utils::isNinjaProd()) @if (Utils::isNinjaProd())
@if (Auth::check() && Auth::user()->isTrial()) @if (Auth::check() && Auth::user()->isTrial())
{!! trans(Auth::user()->account->getCountTrialDaysLeft() == 0 ? 'texts.trial_footer_last_day' : 'texts.trial_footer', [ {!! trans(Auth::user()->account->getCountTrialDaysLeft() == 0 ? 'texts.trial_footer_last_day' : 'texts.trial_footer', [
'count' => Auth::user()->account->getCountTrialDaysLeft(), 'count' => Auth::user()->account->getCountTrialDaysLeft(),
'link' => '<a href="javascript:submitProPlan()">' . trans('texts.click_here') . '</a>' 'link' => '<a href="javascript:submitProPlan()">' . trans('texts.click_here') . '</a>'
]) !!} ]) !!}
@endif @endif
@ -766,8 +766,8 @@
{{ trans('texts.powered_by') }} {{ trans('texts.powered_by') }}
{{-- Per our license, please do not remove or modify this section. --}} {{-- Per our license, please do not remove or modify this section. --}}
{!! link_to('https://www.invoiceninja.com/?utm_source=powered_by', 'InvoiceNinja.com', ['target' => '_blank', 'title' => 'invoiceninja.com']) !!} - {!! link_to('https://www.invoiceninja.com/?utm_source=powered_by', 'InvoiceNinja.com', ['target' => '_blank', 'title' => 'invoiceninja.com']) !!} -
{!! link_to(RELEASES_URL, 'v' . NINJA_VERSION, ['target' => '_blank', 'title' => trans('texts.trello_roadmap')]) !!} | {!! link_to(RELEASES_URL, 'v' . NINJA_VERSION, ['target' => '_blank', 'title' => trans('texts.trello_roadmap')]) !!} |
@if (Auth::user()->account->hasFeature(FEATURE_WHITE_LABEL)) @if (Auth::user()->account->hasFeature(FEATURE_WHITE_LABEL))
{{ trans('texts.white_labeled') }} {{ trans('texts.white_labeled') }}
@else @else
<a href="#" onclick="loadImages('#whiteLabelModal');$('#whiteLabelModal').modal('show');">{{ trans('texts.white_label_link') }}</a> <a href="#" onclick="loadImages('#whiteLabelModal');$('#whiteLabelModal').modal('show');">{{ trans('texts.white_label_link') }}</a>
@ -781,7 +781,7 @@
</div> </div>
<div class="panel-body"> <div class="panel-body">
<p>{{ trans('texts.white_label_text')}}</p> <p>{{ trans('texts.white_label_text', ['price' => WHITE_LABEL_PRICE])}}</p>
<div class="row"> <div class="row">
<div class="col-md-6"> <div class="col-md-6">
<h4>{{ trans('texts.before') }}</h4> <h4>{{ trans('texts.before') }}</h4>
@ -794,7 +794,7 @@
</div> </div>
</div> </div>
<div class="modal-footer" id="signUpFooter" style="margin-top: 0px"> <div class="modal-footer" id="signUpFooter" style="margin-top: 0px">
<button type="button" class="btn btn-default" data-dismiss="modal">{{ trans('texts.close') }} </button> <button type="button" class="btn btn-default" data-dismiss="modal">{{ trans('texts.close') }} </button>
{{-- DropdownButton::success_lg(trans('texts.buy'), [ {{-- DropdownButton::success_lg(trans('texts.buy'), [
['url' => URL::to(""), 'label' => trans('texts.pay_with_paypal')], ['url' => URL::to(""), 'label' => trans('texts.pay_with_paypal')],

View File

@ -17,7 +17,7 @@
label.control-label[for=invoice_number] { label.control-label[for=invoice_number] {
font-weight: normal !important; font-weight: normal !important;
} }
select.tax-select { select.tax-select {
width: 50%; width: 50%;
float: left; float: left;
@ -79,7 +79,7 @@
&nbsp;&nbsp;<div class="label label-danger">{{ trans('texts.deleted') }}</div> &nbsp;&nbsp;<div class="label label-danger">{{ trans('texts.deleted') }}</div>
@endif @endif
</h4> </h4>
@can('view', $invoice->client) @can('view', $invoice->client)
@can('edit', $invoice->client) @can('edit', $invoice->client)
<a id="editClientLink" class="pointer" data-bind="click: $root.showClientForm">{{ trans('texts.edit_client') }}</a> | <a id="editClientLink" class="pointer" data-bind="click: $root.showClientForm">{{ trans('texts.edit_client') }}</a> |
@ -90,7 +90,7 @@
</div> </div>
<div style="display:none"> <div style="display:none">
@endif @endif
{!! Former::select('client')->addOption('', '')->data_bind("dropdown: client")->addClass('client-input')->addGroupClass('client_select closer-row') !!} {!! Former::select('client')->addOption('', '')->data_bind("dropdown: client")->addClass('client-input')->addGroupClass('client_select closer-row') !!}
<div class="form-group" style="margin-bottom: 8px"> <div class="form-group" style="margin-bottom: 8px">
@ -440,7 +440,7 @@
->options($taxRateOptions) ->options($taxRateOptions)
->addClass('tax-select') ->addClass('tax-select')
->data_bind('value: tax1') ->data_bind('value: tax1')
->raw() !!} ->raw() !!}
<input type="text" name="tax_name1" data-bind="value: tax_name1" style="display:none"> <input type="text" name="tax_name1" data-bind="value: tax_name1" style="display:none">
<input type="text" name="tax_rate1" data-bind="value: tax_rate1" style="display:none"> <input type="text" name="tax_rate1" data-bind="value: tax_rate1" style="display:none">
{!! Former::select('') {!! Former::select('')
@ -448,7 +448,7 @@
->options($taxRateOptions) ->options($taxRateOptions)
->addClass('tax-select') ->addClass('tax-select')
->data_bind('value: tax2') ->data_bind('value: tax2')
->raw() !!} ->raw() !!}
<input type="text" name="tax_name2" data-bind="value: tax_name2" style="display:none"> <input type="text" name="tax_name2" data-bind="value: tax_name2" style="display:none">
<input type="text" name="tax_rate2" data-bind="value: tax_rate2" style="display:none"> <input type="text" name="tax_rate2" data-bind="value: tax_rate2" style="display:none">
</td> </td>
@ -550,7 +550,7 @@
@if (!Auth::user()->account->isPro()) @if (!Auth::user()->account->isPro())
<div style="font-size:larger"> <div style="font-size:larger">
{!! trans('texts.pro_plan.remove_logo', ['link'=>'<a href="#" onclick="showProPlan(\'remove_logo\')">'.trans('texts.pro_plan.remove_logo_link').'</a>']) !!} {!! trans('texts.pro_plan_remove_logo', ['link'=>'<a href="#" onclick="showProPlan(\'remove_logo\')">'.trans('texts.pro_plan_remove_logo_link').'</a>']) !!}
</div> </div>
@endif @endif
@ -590,7 +590,7 @@
{!! Former::text('client[work_phone]') {!! Former::text('client[work_phone]')
->label('work_phone') ->label('work_phone')
->data_bind("value: work_phone, valueUpdate: 'afterkeydown'") !!} ->data_bind("value: work_phone, valueUpdate: 'afterkeydown'") !!}
</span> </span>
@if (Auth::user()->hasFeature(FEATURE_INVOICE_SETTINGS)) @if (Auth::user()->hasFeature(FEATURE_INVOICE_SETTINGS))
@ -777,7 +777,7 @@
var $clientSelect = $('select#client'); var $clientSelect = $('select#client');
var invoiceDesigns = {!! $invoiceDesigns !!}; var invoiceDesigns = {!! $invoiceDesigns !!};
var invoiceFonts = {!! $invoiceFonts !!}; var invoiceFonts = {!! $invoiceFonts !!};
$(function() { $(function() {
// create client dictionary // create client dictionary
for (var i=0; i<clients.length; i++) { for (var i=0; i<clients.length; i++) {
@ -865,7 +865,7 @@
} }
@endif @endif
// display blank instead of '0' // display blank instead of '0'
if (!NINJA.parseFloat(model.invoice().discount())) model.invoice().discount(''); if (!NINJA.parseFloat(model.invoice().discount())) model.invoice().discount('');
if (!NINJA.parseFloat(model.invoice().partial())) model.invoice().partial(''); if (!NINJA.parseFloat(model.invoice().partial())) model.invoice().partial('');
@ -987,13 +987,13 @@
@endif @endif
applyComboboxListeners(); applyComboboxListeners();
@if (Auth::user()->account->hasFeature(FEATURE_DOCUMENTS)) @if (Auth::user()->account->hasFeature(FEATURE_DOCUMENTS))
$('.main-form').submit(function(){ $('.main-form').submit(function(){
if($('#document-upload .dropzone .fallback input').val())$(this).attr('enctype', 'multipart/form-data') if($('#document-upload .dropzone .fallback input').val())$(this).attr('enctype', 'multipart/form-data')
else $(this).removeAttr('enctype') else $(this).removeAttr('enctype')
}) })
// Initialize document upload // Initialize document upload
dropzone = new Dropzone('#document-upload .dropzone', { dropzone = new Dropzone('#document-upload .dropzone', {
url:{!! json_encode(url('document')) !!}, url:{!! json_encode(url('document')) !!},
@ -1002,8 +1002,8 @@
}, },
acceptedFiles:{!! json_encode(implode(',',\App\Models\Document::$allowedMimes)) !!}, acceptedFiles:{!! json_encode(implode(',',\App\Models\Document::$allowedMimes)) !!},
addRemoveLinks:true, addRemoveLinks:true,
@foreach(trans('texts.dropzone') as $key=>$text) @foreach(['default_message', 'fallback_message', 'fallback_text', 'file_too_big', 'invalid_file_type', 'response_error', 'cancel_upload', 'cancel_upload_confirmation', 'remove_file'] as $key)
"dict{{strval($key)}}":"{{strval($text)}}", "dict{{Utils::toClassCase($key)}}":"{{trans('texts.dropzone_'.$key)}}",
@endforeach @endforeach
maxFileSize:{{floatval(MAX_DOCUMENT_SIZE/1000)}}, maxFileSize:{{floatval(MAX_DOCUMENT_SIZE/1000)}},
}); });
@ -1245,7 +1245,7 @@
} }
onPartialChange(true); onPartialChange(true);
return true; return true;
} }
@ -1400,24 +1400,24 @@
number = number.replace('{$custom2}', client.custom_value2 ? client.custom_value1 : ''); number = number.replace('{$custom2}', client.custom_value2 ? client.custom_value1 : '');
model.invoice().invoice_number(number); model.invoice().invoice_number(number);
} }
@if ($account->hasFeature(FEATURE_DOCUMENTS)) @if ($account->hasFeature(FEATURE_DOCUMENTS))
function handleDocumentAdded(file){ function handleDocumentAdded(file){
if(file.mock)return; if(file.mock)return;
file.index = model.invoice().documents().length; file.index = model.invoice().documents().length;
model.invoice().addDocument({name:file.name, size:file.size, type:file.type}); model.invoice().addDocument({name:file.name, size:file.size, type:file.type});
} }
function handleDocumentRemoved(file){ function handleDocumentRemoved(file){
model.invoice().removeDocument(file.public_id); model.invoice().removeDocument(file.public_id);
refreshPDF(true); refreshPDF(true);
} }
function handleDocumentUploaded(file, response){ function handleDocumentUploaded(file, response){
file.public_id = response.document.public_id file.public_id = response.document.public_id
model.invoice().documents()[file.index].update(response.document); model.invoice().documents()[file.index].update(response.document);
refreshPDF(true); refreshPDF(true);
if(response.document.preview_url){ if(response.document.preview_url){
dropzone.emit('thumbnail', file, response.document.preview_url); dropzone.emit('thumbnail', file, response.document.preview_url);
} }

View File

@ -13,9 +13,9 @@
<div class="container"> <div class="container">
@if (Utils::isNinja()) @if (Utils::isNinja())
<h3>{{ trans('texts.more_designs_cloud_header') }}</h3> <h3>{{ trans('texts.more_designs_cloud_header') }}</h3>
<p>{{ trans('texts.more_designs_cloud_text') }}</p> <p>{{ trans('texts.more_designs_cloud_text') }}</p>
@else @else
<h3>{{ trans('texts.more_designs_self_host_header') }}</h3> <h3>{{ trans('texts.more_designs_self_host_header', ['price' => INVOICE_DESIGNS_PRICE]) }}</h3>
<p>{{ trans('texts.more_designs_self_host_text') }}</p> <p>{{ trans('texts.more_designs_self_host_text') }}</p>
@endif @endif
</div> </div>
@ -44,9 +44,9 @@
<p>&nbsp;</p> <p>&nbsp;</p>
</center> </center>
<div class="modal-footer" id="signUpFooter"> <div class="modal-footer" id="signUpFooter">
<button type="button" class="btn btn-default" data-dismiss="modal">{{ trans('texts.cancel') }}</button> <button type="button" class="btn btn-default" data-dismiss="modal">{{ trans('texts.cancel') }}</button>
@if (Utils::isNinjaProd()) @if (Utils::isNinjaProd())
<button type="button" class="btn btn-primary" onclick="showProPlan('invoice_designs')">{{ trans('texts.go_pro') }}</button> <button type="button" class="btn btn-primary" onclick="showProPlan('invoice_designs')">{{ trans('texts.go_pro') }}</button>
@else @else
@ -61,7 +61,7 @@
<script type="text/javascript"> <script type="text/javascript">
window.logoImages = {}; window.logoImages = {};
logoImages.imageLogo1 = "{{ Form::image_data('images/report_logo1.jpg') }}"; logoImages.imageLogo1 = "{{ Form::image_data('images/report_logo1.jpg') }}";
logoImages.imageLogoWidth1 =120; logoImages.imageLogoWidth1 =120;
logoImages.imageLogoHeight1 = 40 logoImages.imageLogoHeight1 = 40
@ -79,7 +79,7 @@
if (window.invoice) { if (window.invoice) {
invoice.image = window.accountLogo; invoice.image = window.accountLogo;
invoice.imageWidth = {{ $account->getLogoWidth() }}; invoice.imageWidth = {{ $account->getLogoWidth() }};
invoice.imageHeight = {{ $account->getLogoHeight() }}; invoice.imageHeight = {{ $account->getLogoHeight() }};
} }
@endif @endif
@ -95,9 +95,9 @@
NINJA.secondaryColor = ""; NINJA.secondaryColor = "";
NINJA.fontSize = 9; NINJA.fontSize = 9;
NINJA.headerFont = "Roboto"; NINJA.headerFont = "Roboto";
NINJA.bodyFont = "Roboto"; NINJA.bodyFont = "Roboto";
@endif @endif
var invoiceLabels = {!! json_encode($account->getInvoiceLabels()) !!}; var invoiceLabels = {!! json_encode($account->getInvoiceLabels()) !!};
if (window.invoice) { if (window.invoice) {
@ -113,21 +113,21 @@
//console.log('refresh PDF - force: ' + force + ' ' + (new Date()).getTime()) //console.log('refresh PDF - force: ' + force + ' ' + (new Date()).getTime())
return getPDFString(refreshPDFCB, force); return getPDFString(refreshPDFCB, force);
} }
function refreshPDFCB(string) { function refreshPDFCB(string) {
if (!string) return; if (!string) return;
PDFJS.workerSrc = '{{ asset('js/pdf_viewer.worker.js') }}'; PDFJS.workerSrc = '{{ asset('js/pdf_viewer.worker.js') }}';
var forceJS = {{ Auth::check() && Auth::user()->force_pdfjs ? 'false' : 'true' }}; var forceJS = {{ Auth::check() && Auth::user()->force_pdfjs ? 'false' : 'true' }};
// Temporarily workaround for: https://code.google.com/p/chromium/issues/detail?id=574648 // Temporarily workaround for: https://code.google.com/p/chromium/issues/detail?id=574648
if (forceJS && (isFirefox || (isChrome && (!isChrome48 || {{ isset($viewPDF) && $viewPDF ? 'true' : 'false' }})))) { if (forceJS && (isFirefox || (isChrome && (!isChrome48 || {{ isset($viewPDF) && $viewPDF ? 'true' : 'false' }})))) {
$('#theFrame').attr('src', string).show(); $('#theFrame').attr('src', string).show();
} else { } else {
if (isRefreshing) { if (isRefreshing) {
needsRefresh = true; needsRefresh = true;
return; return;
} }
isRefreshing = true; isRefreshing = true;
var pdfAsArray = convertDataURIToBinary(string); var pdfAsArray = convertDataURIToBinary(string);
PDFJS.getDocument(pdfAsArray).then(function getPdfHelloWorld(pdf) { PDFJS.getDocument(pdfAsArray).then(function getPdfHelloWorld(pdf) {
pdf.getPage(1).then(function getPageHelloWorld(page) { pdf.getPage(1).then(function getPageHelloWorld(page) {
@ -147,7 +147,7 @@
refreshPDF(); refreshPDF();
} }
}); });
}); });
} }
} }
@ -157,4 +157,4 @@
$('#moreDesignsModal').modal('show'); $('#moreDesignsModal').modal('show');
} }
</script> </script>

View File

@ -70,7 +70,7 @@
var thousand = currency.thousand_separator; var thousand = currency.thousand_separator;
var decimal = currency.decimal_separator; var decimal = currency.decimal_separator;
var code = currency.code; var code = currency.code;
var swapSymbol = false; var swapSymbol = currency.swap_currency_symbol;
if (countryId && currencyId == {{ CURRENCY_EURO }}) { if (countryId && currencyId == {{ CURRENCY_EURO }}) {
var country = countryMap[countryId]; var country = countryMap[countryId];

View File

@ -87,6 +87,15 @@
{{ Former::populateField('state', 'NY') }} {{ Former::populateField('state', 'NY') }}
{{ Former::populateField('postal_code', '10118') }} {{ Former::populateField('postal_code', '10118') }}
{{ Former::populateField('country_id', 840) }} {{ Former::populateField('country_id', 840) }}
<script>
$(function() {
$('#card_number').val('4242424242424242');
$('#cvv').val('1234');
$('#expiration_month').val(1);
$('#expiration_year').val({{ date_create()->modify('+3 year')->format('Y') }});
})
</script>
@endif @endif
@ -480,4 +489,4 @@
<a href="https://plaid.com/products/auth/" target="_blank" style="display:none" id="secured_by_plaid"><img src="{{ URL::to('images/plaid-logowhite.svg') }}">{{ trans('texts.secured_by_plaid') }}</a> <a href="https://plaid.com/products/auth/" target="_blank" style="display:none" id="secured_by_plaid"><img src="{{ URL::to('images/plaid-logowhite.svg') }}">{{ trans('texts.secured_by_plaid') }}</a>
<script src="https://cdn.plaid.com/link/stable/link-initialize.js"></script> <script src="https://cdn.plaid.com/link/stable/link-initialize.js"></script>
@endif @endif
@stop @stop