diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 11b8a9de03..630a4e8252 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -48,11 +48,12 @@ jobs: run: | sudo rm -rf bootstrap/cache/* sudo rm -rf node_modules - - name: Prune Git History - run: | - sudo git gc - sudo git gc --aggressive - sudo git prune + sudo rm -rf .git + # - name: Prune Git History + # run: | + # sudo git gc + # sudo git gc --aggressive + # sudo git prune - name: Build project # This would actually build your project, using zip for an example artifact run: | zip -r ./invoiceninja.zip .* -x "../*" diff --git a/VERSION.txt b/VERSION.txt index c90197307a..b72061af4e 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1 +1 @@ -5.1.48 \ No newline at end of file +5.1.49 \ No newline at end of file diff --git a/app/Factory/ClientGatewayTokenFactory.php b/app/Factory/ClientGatewayTokenFactory.php new file mode 100644 index 0000000000..ed8f09049b --- /dev/null +++ b/app/Factory/ClientGatewayTokenFactory.php @@ -0,0 +1,31 @@ +company_id = $company_id; + $client_gateway_token->is_default = false; + $client_gateway_token->meta = ''; + $client_gateway_token->is_deleted = false; + $client_gateway_token->token = ''; + $client_gateway_token->routing_number = ''; + + return $client_gateway_token; + } +} diff --git a/app/Http/Controllers/ClientGatewayTokenController.php b/app/Http/Controllers/ClientGatewayTokenController.php new file mode 100644 index 0000000000..a83988c899 --- /dev/null +++ b/app/Http/Controllers/ClientGatewayTokenController.php @@ -0,0 +1,437 @@ +client_gateway_token_repo = $client_gateway_token_gateway_token_repo; + } + + /** + * @OA\Get( + * path="/api/v1/client_gateway_tokens", + * operationId="getClientGatewayTokens", + * tags={"client_gateway_tokens"}, + * summary="Gets a list of client_gateway_tokens", + * description="Lists client_gateway_tokens, search and filters allow fine grained lists to be generated. + + Query parameters can be added to performed more fine grained filtering of the client_gateway_tokens, these are handled by the ClientGatewayTokenFilters class which defines the methods available", + * @OA\Parameter(ref="#/components/parameters/X-Api-Secret"), + * @OA\Parameter(ref="#/components/parameters/X-Api-Token"), + * @OA\Parameter(ref="#/components/parameters/X-Requested-With"), + * @OA\Parameter(ref="#/components/parameters/include"), + * @OA\Parameter(ref="#/components/parameters/index"), + * @OA\Response( + * response=200, + * description="A list of client_gateway_tokens", + * @OA\Header(header="X-MINIMUM-CLIENT-VERSION", ref="#/components/headers/X-MINIMUM-CLIENT-VERSION"), + * @OA\Header(header="X-RateLimit-Remaining", ref="#/components/headers/X-RateLimit-Remaining"), + * @OA\Header(header="X-RateLimit-Limit", ref="#/components/headers/X-RateLimit-Limit"), + * @OA\JsonContent(ref="#/components/schemas/ClientGatewayToken"), + * ), + * @OA\Response( + * response=422, + * description="Validation error", + * @OA\JsonContent(ref="#/components/schemas/ValidationError"), + * ), + * @OA\Response( + * response="default", + * description="Unexpected Error", + * @OA\JsonContent(ref="#/components/schemas/Error"), + * ), + * ) + * @param ClientGatewayTokenFilters $filters + * @return Response|mixed + */ + public function index(Request $request) + { + $client_gateway_token_gateway_tokens = ClientGatewayToken::scope(); + + return $this->listResponse($client_gateway_token_gateway_tokens); + } + + /** + * Display the specified resource. + * + * @param ShowClientGatewayTokenRequest $request + * @param ClientGatewayToken $client_gateway_token + * @return Response + * + * + * @OA\Get( + * path="/api/v1/client_gateway_tokens/{id}", + * operationId="showClientGatewayToken", + * tags={"client_gateway_tokens"}, + * summary="Shows a client", + * description="Displays a client by id", + * @OA\Parameter(ref="#/components/parameters/X-Api-Secret"), + * @OA\Parameter(ref="#/components/parameters/X-Api-Token"), + * @OA\Parameter(ref="#/components/parameters/X-Requested-With"), + * @OA\Parameter(ref="#/components/parameters/include"), + * @OA\Parameter( + * name="id", + * in="path", + * description="The ClientGatewayToken Hashed ID", + * example="D2J234DFA", + * required=true, + * @OA\Schema( + * type="string", + * format="string", + * ), + * ), + * @OA\Response( + * response=200, + * description="Returns the cl.ient object", + * @OA\Header(header="X-MINIMUM-CLIENT-VERSION", ref="#/components/headers/X-MINIMUM-CLIENT-VERSION"), + * @OA\Header(header="X-RateLimit-Remaining", ref="#/components/headers/X-RateLimit-Remaining"), + * @OA\Header(header="X-RateLimit-Limit", ref="#/components/headers/X-RateLimit-Limit"), + * @OA\JsonContent(ref="#/components/schemas/ClientGatewayToken"), + * ), + * @OA\Response( + * response=422, + * description="Validation error", + * @OA\JsonContent(ref="#/components/schemas/ValidationError"), + * + * ), + * @OA\Response( + * response="default", + * description="Unexpected Error", + * @OA\JsonContent(ref="#/components/schemas/Error"), + * ), + * ) + */ + public function show(ShowClientGatewayTokenRequest $request, ClientGatewayToken $client_gateway_token) + { + return $this->itemResponse($client_gateway_token); + } + + /** + * Show the form for editing the specified resource. + * + * @param EditClientGatewayTokenRequest $request + * @param ClientGatewayToken $client_gateway_token + * @return Response + * + * + * @OA\Get( + * path="/api/v1/client_gateway_tokens/{id}/edit", + * operationId="editClientGatewayToken", + * tags={"client_gateway_tokens"}, + * summary="Shows a client for editting", + * description="Displays a client by id", + * @OA\Parameter(ref="#/components/parameters/X-Api-Secret"), + * @OA\Parameter(ref="#/components/parameters/X-Api-Token"), + * @OA\Parameter(ref="#/components/parameters/X-Requested-With"), + * @OA\Parameter(ref="#/components/parameters/include"), + * @OA\Parameter( + * name="id", + * in="path", + * description="The ClientGatewayToken Hashed ID", + * example="D2J234DFA", + * required=true, + * @OA\Schema( + * type="string", + * format="string", + * ), + * ), + * @OA\Response( + * response=200, + * description="Returns the client object", + * @OA\Header(header="X-MINIMUM-CLIENT-VERSION", ref="#/components/headers/X-MINIMUM-CLIENT-VERSION"), + * @OA\Header(header="X-RateLimit-Remaining", ref="#/components/headers/X-RateLimit-Remaining"), + * @OA\Header(header="X-RateLimit-Limit", ref="#/components/headers/X-RateLimit-Limit"), + * @OA\JsonContent(ref="#/components/schemas/ClientGatewayToken"), + * ), + * @OA\Response( + * response=422, + * description="Validation error", + * @OA\JsonContent(ref="#/components/schemas/ValidationError"), + * + * ), + * @OA\Response( + * response="default", + * description="Unexpected Error", + * @OA\JsonContent(ref="#/components/schemas/Error"), + * ), + * ) + */ + public function edit(EditClientGatewayTokenRequest $request, ClientGatewayToken $client_gateway_token) + { + return $this->itemResponse($client_gateway_token); + } + + /** + * Update the specified resource in storage. + * + * @param UpdateClientGatewayTokenRequest $request + * @param ClientGatewayToken $client_gateway_token + * @return Response + * + * + * + * @OA\Put( + * path="/api/v1/client_gateway_tokens/{id}", + * operationId="updateClientGatewayToken", + * tags={"client_gateway_tokens"}, + * summary="Updates a client", + * description="Handles the updating of a client by id", + * @OA\Parameter(ref="#/components/parameters/X-Api-Secret"), + * @OA\Parameter(ref="#/components/parameters/X-Api-Token"), + * @OA\Parameter(ref="#/components/parameters/X-Requested-With"), + * @OA\Parameter(ref="#/components/parameters/include"), + * @OA\Parameter( + * name="id", + * in="path", + * description="The ClientGatewayToken Hashed ID", + * example="D2J234DFA", + * required=true, + * @OA\Schema( + * type="string", + * format="string", + * ), + * ), + * @OA\Response( + * response=200, + * description="Returns the client object", + * @OA\Header(header="X-MINIMUM-CLIENT-VERSION", ref="#/components/headers/X-MINIMUM-CLIENT-VERSION"), + * @OA\Header(header="X-RateLimit-Remaining", ref="#/components/headers/X-RateLimit-Remaining"), + * @OA\Header(header="X-RateLimit-Limit", ref="#/components/headers/X-RateLimit-Limit"), + * @OA\JsonContent(ref="#/components/schemas/ClientGatewayToken"), + * ), + * @OA\Response( + * response=422, + * description="Validation error", + * @OA\JsonContent(ref="#/components/schemas/ValidationError"), + * + * ), + * @OA\Response( + * response="default", + * description="Unexpected Error", + * @OA\JsonContent(ref="#/components/schemas/Error"), + * ), + * ) + */ + public function update(UpdateClientGatewayTokenRequest $request, ClientGatewayToken $client_gateway_token) + { + + $client_gateway_token = $this->client_gateway_token_repo->save($request->all(), $client_gateway_token); + + return $this->itemResponse($client_gateway_token->fresh()); + } + + /** + * Show the form for creating a new resource. + * + * @param CreateClientGatewayTokenRequest $request + * @return Response + * + * + * + * @OA\Get( + * path="/api/v1/client_gateway_tokens/create", + * operationId="getClientGatewayTokensCreate", + * tags={"client_gateway_tokens"}, + * summary="Gets a new blank client object", + * description="Returns a blank object with default values", + * @OA\Parameter(ref="#/components/parameters/X-Api-Secret"), + * @OA\Parameter(ref="#/components/parameters/X-Api-Token"), + * @OA\Parameter(ref="#/components/parameters/X-Requested-With"), + * @OA\Parameter(ref="#/components/parameters/include"), + * @OA\Response( + * response=200, + * description="A blank client object", + * @OA\Header(header="X-MINIMUM-CLIENT-VERSION", ref="#/components/headers/X-MINIMUM-CLIENT-VERSION"), + * @OA\Header(header="X-RateLimit-Remaining", ref="#/components/headers/X-RateLimit-Remaining"), + * @OA\Header(header="X-RateLimit-Limit", ref="#/components/headers/X-RateLimit-Limit"), + * @OA\JsonContent(ref="#/components/schemas/ClientGatewayToken"), + * ), + * @OA\Response( + * response=422, + * description="Validation error", + * @OA\JsonContent(ref="#/components/schemas/ValidationError"), + * + * ), + * @OA\Response( + * response="default", + * description="Unexpected Error", + * @OA\JsonContent(ref="#/components/schemas/Error"), + * ), + * ) + */ + public function create(CreateClientGatewayTokenRequest $request) + { + $client_gateway_token = ClientGatewayTokenFactory::create(auth()->user()->company()->id); + + $client_gateway_token = $this->client_gateway_token_repo->save($request->all(), $client_gateway_token); + + return $this->itemResponse($client_gateway_token); + } + + /** + * Store a newly created resource in storage. + * + * @param StoreClientGatewayTokenRequest $request + * @return Response + * + * + * + * @OA\Post( + * path="/api/v1/client_gateway_tokens", + * operationId="storeClientGatewayToken", + * tags={"client_gateway_tokens"}, + * summary="Adds a client", + * description="Adds an client to a company", + * @OA\Parameter(ref="#/components/parameters/X-Api-Secret"), + * @OA\Parameter(ref="#/components/parameters/X-Api-Token"), + * @OA\Parameter(ref="#/components/parameters/X-Requested-With"), + * @OA\Parameter(ref="#/components/parameters/include"), + * @OA\Response( + * response=200, + * description="Returns the saved client object", + * @OA\Header(header="X-MINIMUM-CLIENT-VERSION", ref="#/components/headers/X-MINIMUM-CLIENT-VERSION"), + * @OA\Header(header="X-RateLimit-Remaining", ref="#/components/headers/X-RateLimit-Remaining"), + * @OA\Header(header="X-RateLimit-Limit", ref="#/components/headers/X-RateLimit-Limit"), + * @OA\JsonContent(ref="#/components/schemas/ClientGatewayToken"), + * ), + * @OA\Response( + * response=422, + * description="Validation error", + * @OA\JsonContent(ref="#/components/schemas/ValidationError"), + * + * ), + * @OA\Response( + * response="default", + * description="Unexpected Error", + * @OA\JsonContent(ref="#/components/schemas/Error"), + * ), + * ) + */ + public function store(StoreClientGatewayTokenRequest $request) + { + $client_gateway_token = ClientGatewayTokenFactory::create(auth()->user()->company()->id); + + $client_gateway_token = $this->client_gateway_token_repo->save($request->all(), $client_gateway_token); + + return $this->itemResponse($client_gateway_token); + } + + /** + * Remove the specified resource from storage. + * + * @param DestroyClientGatewayTokenRequest $request + * @param ClientGatewayToken $client_gateway_token + * @return Response + * + * + * @throws \Exception + * @OA\Delete( + * path="/api/v1/client_gateway_tokens/{id}", + * operationId="deleteClientGatewayToken", + * tags={"client_gateway_tokens"}, + * summary="Deletes a client", + * description="Handles the deletion of a client by id", + * @OA\Parameter(ref="#/components/parameters/X-Api-Secret"), + * @OA\Parameter(ref="#/components/parameters/X-Api-Token"), + * @OA\Parameter(ref="#/components/parameters/X-Requested-With"), + * @OA\Parameter(ref="#/components/parameters/include"), + * @OA\Parameter( + * name="id", + * in="path", + * description="The ClientGatewayToken Hashed ID", + * example="D2J234DFA", + * required=true, + * @OA\Schema( + * type="string", + * format="string", + * ), + * ), + * @OA\Response( + * response=200, + * description="Returns a HTTP status", + * @OA\Header(header="X-MINIMUM-CLIENT-VERSION", ref="#/components/headers/X-MINIMUM-CLIENT-VERSION"), + * @OA\Header(header="X-RateLimit-Remaining", ref="#/components/headers/X-RateLimit-Remaining"), + * @OA\Header(header="X-RateLimit-Limit", ref="#/components/headers/X-RateLimit-Limit"), + * ), + * @OA\Response( + * response=422, + * description="Validation error", + * @OA\JsonContent(ref="#/components/schemas/ValidationError"), + * + * ), + * @OA\Response( + * response="default", + * description="Unexpected Error", + * @OA\JsonContent(ref="#/components/schemas/Error"), + * ), + * ) + */ + public function destroy(DestroyClientGatewayTokenRequest $request, ClientGatewayToken $client_gateway_token) + { + + $this->client_gateway_token_repo->delete($client_gateway_token); + + return $this->itemResponse($client_gateway_token->fresh()); + + } + +} diff --git a/app/Http/Controllers/LicenseController.php b/app/Http/Controllers/LicenseController.php index 4549203ce4..d762b69c90 100644 --- a/app/Http/Controllers/LicenseController.php +++ b/app/Http/Controllers/LicenseController.php @@ -81,6 +81,7 @@ class LicenseController extends BaseController */ public function index() { + $this->checkLicense(); /* Catch claim license requests */ if (config('ninja.environment') == 'selfhost' && request()->has('license_key')) { @@ -140,4 +141,15 @@ class LicenseController extends BaseController return response()->json($error, 400); } + + private function checkLicense() + { + $account = auth()->user()->company()->account; + + if($account->plan == 'white_label' && $account->plan_expires->lt(now())){ + $account->plan = null; + $account->plan_expires = null; + $account->save(); + } + } } diff --git a/app/Http/Controllers/MigrationController.php b/app/Http/Controllers/MigrationController.php index 964af91639..ceb5394d98 100644 --- a/app/Http/Controllers/MigrationController.php +++ b/app/Http/Controllers/MigrationController.php @@ -165,6 +165,10 @@ class MigrationController extends BaseController { $company->clients()->forceDelete(); $company->products()->forceDelete(); + $company->projects()->forceDelete(); + $company->tasks()->forceDelete(); + $company->vendors()->forceDelete(); + $company->expenses()->forceDelete(); $company->save(); diff --git a/app/Http/Requests/ClientGatewayToken/CreateClientGatewayTokenRequest.php b/app/Http/Requests/ClientGatewayToken/CreateClientGatewayTokenRequest.php new file mode 100644 index 0000000000..acf74aa05e --- /dev/null +++ b/app/Http/Requests/ClientGatewayToken/CreateClientGatewayTokenRequest.php @@ -0,0 +1,28 @@ +user()->isAdmin(); + } +} diff --git a/app/Http/Requests/ClientGatewayToken/DestroyClientGatewayTokenRequest.php b/app/Http/Requests/ClientGatewayToken/DestroyClientGatewayTokenRequest.php new file mode 100644 index 0000000000..755d003364 --- /dev/null +++ b/app/Http/Requests/ClientGatewayToken/DestroyClientGatewayTokenRequest.php @@ -0,0 +1,27 @@ +user()->isAdmin(); + } +} diff --git a/app/Http/Requests/ClientGatewayToken/EditClientGatewayTokenRequest.php b/app/Http/Requests/ClientGatewayToken/EditClientGatewayTokenRequest.php new file mode 100644 index 0000000000..33fb1b30e9 --- /dev/null +++ b/app/Http/Requests/ClientGatewayToken/EditClientGatewayTokenRequest.php @@ -0,0 +1,28 @@ +user()->isAdmin(); + } + +} diff --git a/app/Http/Requests/ClientGatewayToken/ShowClientGatewayTokenRequest.php b/app/Http/Requests/ClientGatewayToken/ShowClientGatewayTokenRequest.php new file mode 100644 index 0000000000..004d068ac6 --- /dev/null +++ b/app/Http/Requests/ClientGatewayToken/ShowClientGatewayTokenRequest.php @@ -0,0 +1,27 @@ +user()->isAdmin(); + } +} diff --git a/app/Http/Requests/ClientGatewayToken/StoreClientGatewayTokenRequest.php b/app/Http/Requests/ClientGatewayToken/StoreClientGatewayTokenRequest.php new file mode 100644 index 0000000000..ca5340d69e --- /dev/null +++ b/app/Http/Requests/ClientGatewayToken/StoreClientGatewayTokenRequest.php @@ -0,0 +1,67 @@ +user()->isAdmin(); + } + + public function rules() + { + $rules = [ + 'client_id' => 'required', + 'company_gateway_id' => 'required', + 'gateway_type_id' => 'required|integer', + 'meta' => 'required', + ]; + + + return $this->globalRules($rules); + + } + + protected function prepareForValidation() + { + $input = $this->all(); + + $input = $this->decodePrimaryKeys($input); + + $this->replace($input); + } + + public function messages() + { + return [ + ]; + } + +} diff --git a/app/Http/Requests/ClientGatewayToken/UpdateClientGatewayTokenRequest.php b/app/Http/Requests/ClientGatewayToken/UpdateClientGatewayTokenRequest.php new file mode 100644 index 0000000000..ff38aa0e62 --- /dev/null +++ b/app/Http/Requests/ClientGatewayToken/UpdateClientGatewayTokenRequest.php @@ -0,0 +1,56 @@ +user()->isAdmin(); + } + + public function rules() + { + /* Ensure we have a client name, and that all emails are unique*/ + $rules = []; + return $rules; + } + + public function messages() + { + return [ + ]; + } + + protected function prepareForValidation() + { + $input = $this->all(); + + + $this->replace($input); + } + +} diff --git a/app/Http/Requests/Request.php b/app/Http/Requests/Request.php index 5e59e53276..c4666534a3 100644 --- a/app/Http/Requests/Request.php +++ b/app/Http/Requests/Request.php @@ -106,6 +106,10 @@ class Request extends FormRequest $input['project_id'] = $this->decodePrimaryKey($input['project_id']); } + if (array_key_exists('company_gateway_id', $input) && is_string($input['company_gateway_id'])) { + $input['company_gateway_id'] = $this->decodePrimaryKey($input['company_gateway_id']); + } + if (isset($input['client_contacts'])) { foreach ($input['client_contacts'] as $key => $contact) { if (! array_key_exists('send_email', $contact) || ! array_key_exists('id', $contact)) { diff --git a/app/Jobs/Util/VersionCheck.php b/app/Jobs/Util/VersionCheck.php index 2d61275f0d..8348b984f6 100644 --- a/app/Jobs/Util/VersionCheck.php +++ b/app/Jobs/Util/VersionCheck.php @@ -12,6 +12,7 @@ namespace App\Jobs\Util; use App\Models\Account; +use App\Utils\Ninja; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; @@ -40,5 +41,16 @@ class VersionCheck implements ShouldQueue if ($version_file) { Account::whereNotNull('id')->update(['latest_version' => $version_file]); } + + if(Ninja::isSelfHost()) + { + $account = Account::first(); + + if($account->plan == 'white_label' && $account->plan_expires->lt(now())){ + $account->plan = null; + $account->plan_expires = null; + $account->save(); + } + } } } diff --git a/app/Models/ClientGatewayToken.php b/app/Models/ClientGatewayToken.php index a68ad92248..b1c6e19534 100644 --- a/app/Models/ClientGatewayToken.php +++ b/app/Models/ClientGatewayToken.php @@ -29,6 +29,14 @@ class ClientGatewayToken extends BaseModel 'hashed_id', ]; + protected $fillable = [ + 'token', + 'routing_number', + 'gateway_customer_reference', + 'gateway_type_id', + 'meta', + ]; + public function getEntityType() { return self::class; diff --git a/app/Models/Invoice.php b/app/Models/Invoice.php index b15649d238..dadfa3e222 100644 --- a/app/Models/Invoice.php +++ b/app/Models/Invoice.php @@ -397,7 +397,7 @@ class Invoice extends BaseModel $storage_path = Storage::$type($this->client->invoice_filepath().$this->numberFormatter().'.pdf'); if (! Storage::exists($this->client->invoice_filepath().$this->numberFormatter().'.pdf')) { - event(new InvoiceWasUpdated($this, $this->company, Ninja::eventVars(auth()->user()->id))); + event(new InvoiceWasUpdated($this, $this->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null))); CreateEntityPdf::dispatchNow($invitation); } diff --git a/app/Models/InvoiceInvitation.php b/app/Models/InvoiceInvitation.php index 51042e7d70..3fa1f4918c 100644 --- a/app/Models/InvoiceInvitation.php +++ b/app/Models/InvoiceInvitation.php @@ -143,7 +143,7 @@ class InvoiceInvitation extends BaseModel $storage_path = Storage::url($this->invoice->client->invoice_filepath().$this->invoice->numberFormatter().'.pdf'); if (! Storage::exists($this->invoice->client->invoice_filepath().$this->invoice->numberFormatter().'.pdf')) { - event(new InvoiceWasUpdated($this->invoice, $this->company, Ninja::eventVars(auth()->user()->id))); + event(new InvoiceWasUpdated($this->invoice, $this->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null))); CreateEntityPdf::dispatchNow($this); } diff --git a/app/Repositories/ClientGatewayTokenRepository.php b/app/Repositories/ClientGatewayTokenRepository.php new file mode 100644 index 0000000000..311096a62a --- /dev/null +++ b/app/Repositories/ClientGatewayTokenRepository.php @@ -0,0 +1,31 @@ +fill($data); + $client_gateway_token->save(); + + return $client_gateway_token->fresh(); + } + +} diff --git a/app/Services/Credit/ApplyPayment.php b/app/Services/Credit/ApplyPayment.php index 944e75cf46..0ebd7d6ab5 100644 --- a/app/Services/Credit/ApplyPayment.php +++ b/app/Services/Credit/ApplyPayment.php @@ -144,11 +144,11 @@ class ApplyPayment ->ledger() ->updateCreditBalance(($this->amount_applied * -1), "Credit payment applied to Invoice {$this->invoice->number}"); - event(new InvoiceWasUpdated($this->invoice, $this->invoice->company, Ninja::eventVars(auth()->user()->id))); + event(new InvoiceWasUpdated($this->invoice, $this->invoice->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null))); if ((int)$this->invoice->balance == 0) { $this->invoice->service()->deletePdf(); - event(new InvoiceWasPaid($this->invoice, $this->payment, $this->payment->company, Ninja::eventVars(auth()->user()->id))); + event(new InvoiceWasPaid($this->invoice, $this->payment, $this->payment->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null))); } } } diff --git a/app/Services/Payment/UpdateInvoicePayment.php b/app/Services/Payment/UpdateInvoicePayment.php index 0af4a1e431..b9eda4fb7b 100644 --- a/app/Services/Payment/UpdateInvoicePayment.php +++ b/app/Services/Payment/UpdateInvoicePayment.php @@ -87,7 +87,7 @@ class UpdateInvoicePayment InvoiceWorkflowSettings::dispatchNow($invoice); - event(new InvoiceWasUpdated($invoice, $invoice->company, Ninja::eventVars())); + event(new InvoiceWasUpdated($invoice, $invoice->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null))); }); $this->payment->save(); diff --git a/config/ninja.php b/config/ninja.php index 1791a4e594..533fa49001 100644 --- a/config/ninja.php +++ b/config/ninja.php @@ -14,8 +14,8 @@ return [ 'require_https' => env('REQUIRE_HTTPS', true), 'app_url' => rtrim(env('APP_URL', ''), '/'), 'app_domain' => env('APP_DOMAIN', ''), - 'app_version' => '5.1.48', - 'app_tag' => '5.1.48-release', + 'app_version' => '5.1.49', + 'app_tag' => '5.1.49-release', 'minimum_client_version' => '5.0.16', 'terms_version' => '1.0.1', 'api_secret' => env('API_SECRET', false), diff --git a/public/images/welcome/circle-2.png b/public/images/welcome/circle-2.png new file mode 100644 index 0000000000..de4620b93b Binary files /dev/null and b/public/images/welcome/circle-2.png differ diff --git a/public/images/welcome/compScreen.png b/public/images/welcome/compScreen.png new file mode 100644 index 0000000000..0ff2235c92 Binary files /dev/null and b/public/images/welcome/compScreen.png differ diff --git a/public/images/welcome/create-icon.png b/public/images/welcome/create-icon.png new file mode 100644 index 0000000000..34542e97c3 Binary files /dev/null and b/public/images/welcome/create-icon.png differ diff --git a/public/images/welcome/email.png b/public/images/welcome/email.png new file mode 100644 index 0000000000..7ea6bf8c05 Binary files /dev/null and b/public/images/welcome/email.png differ diff --git a/public/images/welcome/forum.png b/public/images/welcome/forum.png new file mode 100644 index 0000000000..836446c3c2 Binary files /dev/null and b/public/images/welcome/forum.png differ diff --git a/public/images/welcome/integrate-icon.png b/public/images/welcome/integrate-icon.png new file mode 100644 index 0000000000..7b6e368afe Binary files /dev/null and b/public/images/welcome/integrate-icon.png differ diff --git a/public/images/welcome/logo.png b/public/images/welcome/logo.png new file mode 100644 index 0000000000..ac6dce991c Binary files /dev/null and b/public/images/welcome/logo.png differ diff --git a/public/images/welcome/question.png b/public/images/welcome/question.png new file mode 100644 index 0000000000..a12cc83e83 Binary files /dev/null and b/public/images/welcome/question.png differ diff --git a/public/images/welcome/slack.png b/public/images/welcome/slack.png new file mode 100644 index 0000000000..5a42af5ba7 Binary files /dev/null and b/public/images/welcome/slack.png differ diff --git a/public/images/welcome/upload-icon.png b/public/images/welcome/upload-icon.png new file mode 100644 index 0000000000..36293ebf3e Binary files /dev/null and b/public/images/welcome/upload-icon.png differ diff --git a/resources/lang/ru_RU/texts.php b/resources/lang/ru_RU/texts.php index c68fd3a871..321d499a3a 100644 --- a/resources/lang/ru_RU/texts.php +++ b/resources/lang/ru_RU/texts.php @@ -1,341 +1,341 @@ 'Organization', - 'name' => 'Name', - 'website' => 'Website', - 'work_phone' => 'Phone', - 'address' => 'Address', - 'address1' => 'Street', - 'address2' => 'Apt/Suite', - 'city' => 'City', - 'state' => 'State/Province', - 'postal_code' => 'Postal Code', - 'country_id' => 'Country', - 'contacts' => 'Contacts', - 'first_name' => 'First Name', - 'last_name' => 'Last Name', - 'phone' => 'Phone', - 'email' => 'Email', - 'additional_info' => 'Additional Info', - 'payment_terms' => 'Payment Terms', - 'currency_id' => 'Currency', - 'size_id' => 'Company Size', - 'industry_id' => 'Industry', - 'private_notes' => 'Private Notes', - 'invoice' => 'Invoice', - 'client' => 'Client', - 'invoice_date' => 'Invoice Date', - 'due_date' => 'Due Date', - 'invoice_number' => 'Invoice Number', - 'invoice_number_short' => 'Invoice #', - 'po_number' => 'PO Number', - 'po_number_short' => 'PO #', - 'frequency_id' => 'How Often', - 'discount' => 'Discount', - 'taxes' => 'Taxes', - 'tax' => 'Tax', - 'item' => 'Item', - 'description' => 'Description', - 'unit_cost' => 'Unit Cost', - 'quantity' => 'Quantity', - 'line_total' => 'Line Total', - 'subtotal' => 'Subtotal', - 'paid_to_date' => 'Paid to Date', - 'balance_due' => 'Balance Due', - 'invoice_design_id' => 'Design', - 'terms' => 'Terms', - 'your_invoice' => 'Your Invoice', - 'remove_contact' => 'Remove contact', - 'add_contact' => 'Add contact', - 'create_new_client' => 'Create new client', - 'edit_client_details' => 'Edit client details', - 'enable' => 'Enable', - 'learn_more' => 'Learn more', - 'manage_rates' => 'Manage rates', - 'note_to_client' => 'Note to Client', - 'invoice_terms' => 'Invoice Terms', - 'save_as_default_terms' => 'Save as default terms', - 'download_pdf' => 'Download PDF', - 'pay_now' => 'Pay Now', - 'save_invoice' => 'Save Invoice', - 'clone_invoice' => 'Clone To Invoice', - 'archive_invoice' => 'Archive Invoice', - 'delete_invoice' => 'Delete Invoice', - 'email_invoice' => 'Email Invoice', - 'enter_payment' => 'Enter Payment', - 'tax_rates' => 'Tax Rates', - 'rate' => 'Rate', - 'settings' => 'Settings', - 'enable_invoice_tax' => 'Enable specifying an invoice tax', - 'enable_line_item_tax' => 'Enable specifying line item taxes', - 'dashboard' => 'Dashboard', - 'dashboard_totals_in_all_currencies_help' => 'Note: add a :link named ":name" to show the totals using a single base currency.', - 'clients' => 'Clients', - 'invoices' => 'Invoices', - 'payments' => 'Payments', - 'credits' => 'Credits', - 'history' => 'History', - 'search' => 'Search', - 'sign_up' => 'Sign Up', - 'guest' => 'Guest', - 'company_details' => 'Company Details', - 'online_payments' => 'Online Payments', - 'notifications' => 'Notifications', - 'import_export' => 'Import | Export', - 'done' => 'Done', - 'save' => 'Save', - 'create' => 'Create', - 'upload' => 'Upload', - 'import' => 'Import', - 'download' => 'Download', - 'cancel' => 'Cancel', - 'close' => 'Close', - 'provide_email' => 'Please provide a valid email address', - 'powered_by' => 'Powered by', - 'no_items' => 'No items', - 'recurring_invoices' => 'Recurring Invoices', - 'recurring_help' => '

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

-

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

-

Examples of dynamic invoice variables:

- ', - 'recurring_quotes' => 'Recurring Quotes', - 'in_total_revenue' => 'in total revenue', - 'billed_client' => 'billed client', - 'billed_clients' => 'billed clients', - 'active_client' => 'active client', - 'active_clients' => 'active clients', - 'invoices_past_due' => 'Invoices Past Due', - 'upcoming_invoices' => 'Upcoming Invoices', - 'average_invoice' => 'Average Invoice', - 'archive' => 'Archive', - 'delete' => 'Delete', - 'archive_client' => 'Archive Client', - 'delete_client' => 'Delete Client', - 'archive_payment' => 'Archive Payment', - 'delete_payment' => 'Delete Payment', - 'archive_credit' => 'Archive Credit', - 'delete_credit' => 'Delete Credit', - 'show_archived_deleted' => 'Show archived/deleted', - 'filter' => 'Filter', - 'new_client' => 'New Client', - 'new_invoice' => 'New Invoice', - 'new_payment' => 'Enter Payment', - 'new_credit' => 'Enter Credit', - 'contact' => 'Contact', - 'date_created' => 'Date Created', - 'last_login' => 'Last Login', - 'balance' => 'Balance', - 'action' => 'Action', - 'status' => 'Status', - 'invoice_total' => 'Invoice Total', - 'frequency' => 'Frequency', - 'range' => 'Range', - 'start_date' => 'Start Date', - 'end_date' => 'End Date', - 'transaction_reference' => 'Transaction Reference', - 'method' => 'Method', - 'payment_amount' => 'Payment Amount', - 'payment_date' => 'Payment Date', - 'credit_amount' => 'Credit Amount', - 'credit_balance' => 'Credit Balance', - 'credit_date' => 'Credit Date', - 'empty_table' => 'No data available in table', - 'select' => 'Select', - 'edit_client' => 'Edit Client', - 'edit_invoice' => 'Edit Invoice', - 'create_invoice' => 'Create Invoice', - 'enter_credit' => 'Enter Credit', - 'last_logged_in' => 'Last logged in', - 'details' => 'Details', - 'standing' => 'Standing', - 'credit' => 'Credit', - 'activity' => 'Activity', - 'date' => 'Date', - 'message' => 'Message', - 'adjustment' => 'Adjustment', - 'are_you_sure' => 'Are you sure?', - 'payment_type_id' => 'Payment Type', - 'amount' => 'Amount', - 'work_email' => 'Email', - 'language_id' => 'Language', - 'timezone_id' => 'Timezone', - 'date_format_id' => 'Date Format', - 'datetime_format_id' => 'Date/Time Format', - 'users' => 'Users', - 'localization' => 'Localization', - 'remove_logo' => 'Remove logo', - 'logo_help' => 'Supported: JPEG, GIF and PNG', - 'payment_gateway' => 'Payment Gateway', - 'gateway_id' => 'Gateway', - 'email_notifications' => 'Email Notifications', - 'email_sent' => 'Email me when an invoice is sent', - 'email_viewed' => 'Email me when an invoice is viewed', - 'email_paid' => 'Email me when an invoice is paid', - 'site_updates' => 'Site Updates', - 'custom_messages' => 'Custom Messages', - 'default_email_footer' => 'Set default email signature', - 'select_file' => 'Please select a file', - 'first_row_headers' => 'Use first row as headers', - 'column' => 'Column', - 'sample' => 'Sample', - 'import_to' => 'Import to', - 'client_will_create' => 'client will be created', - 'clients_will_create' => 'clients will be created', - 'email_settings' => 'Email Settings', - 'client_view_styling' => 'Client View Styling', - 'pdf_email_attachment' => 'Attach PDF', - 'custom_css' => 'Custom CSS', - 'import_clients' => 'Import Client Data', - 'csv_file' => 'CSV file', - 'export_clients' => 'Export Client Data', - 'created_client' => 'Successfully created client', - 'created_clients' => 'Successfully created :count client(s)', - 'updated_settings' => 'Successfully updated settings', - 'removed_logo' => 'Successfully removed logo', - 'sent_message' => 'Successfully sent message', - 'invoice_error' => 'Please make sure to select a client and correct any errors', - 'limit_clients' => 'Sorry, this will exceed the limit of :count clients', - 'payment_error' => 'There was an error processing your payment. Please try again later.', - 'registration_required' => 'Please sign up to email an invoice', - 'confirmation_required' => 'Please confirm your email address, :link to resend the confirmation email.', - 'updated_client' => 'Successfully updated client', - 'archived_client' => 'Successfully archived client', - 'archived_clients' => 'Successfully archived :count clients', - 'deleted_client' => 'Successfully deleted client', - 'deleted_clients' => 'Successfully deleted :count clients', - 'updated_invoice' => 'Successfully updated invoice', - 'created_invoice' => 'Successfully created invoice', - 'cloned_invoice' => 'Successfully cloned invoice', - 'emailed_invoice' => 'Successfully emailed invoice', - 'and_created_client' => 'and created client', - 'archived_invoice' => 'Successfully archived invoice', - 'archived_invoices' => 'Successfully archived :count invoices', - 'deleted_invoice' => 'Successfully deleted invoice', - 'deleted_invoices' => 'Successfully deleted :count invoices', - 'created_payment' => 'Successfully created payment', - 'created_payments' => 'Successfully created :count payment(s)', - 'archived_payment' => 'Successfully archived payment', - 'archived_payments' => 'Successfully archived :count payments', - 'deleted_payment' => 'Successfully deleted payment', - 'deleted_payments' => 'Successfully deleted :count payments', - 'applied_payment' => 'Successfully applied payment', - 'created_credit' => 'Successfully created credit', - 'archived_credit' => 'Successfully archived credit', - 'archived_credits' => 'Successfully archived :count credits', - 'deleted_credit' => 'Successfully deleted credit', - 'deleted_credits' => 'Successfully deleted :count credits', - 'imported_file' => 'Successfully imported file', - 'updated_vendor' => 'Successfully updated vendor', - 'created_vendor' => 'Successfully created vendor', - 'archived_vendor' => 'Successfully archived vendor', - 'archived_vendors' => 'Successfully archived :count vendors', - 'deleted_vendor' => 'Successfully deleted vendor', - 'deleted_vendors' => 'Successfully deleted :count vendors', - 'confirmation_subject' => 'Invoice Ninja Account Confirmation', - 'confirmation_header' => 'Account Confirmation', - 'confirmation_message' => 'Please access the link below to confirm your account.', - 'invoice_subject' => 'New invoice :number from :account', - 'invoice_message' => 'To view your invoice for :amount, click the link below.', - 'payment_subject' => 'Payment Received', - 'payment_message' => 'Thank you for your payment of :amount.', - 'email_salutation' => 'Dear :name,', - 'email_signature' => 'Regards,', + 'organization' => 'Организация', + 'name' => 'Название', + 'website' => 'Веб-сайт', + 'work_phone' => 'Телефон', + 'address' => 'Адрес', + 'address1' => 'Улица', + 'address2' => 'Дом/Офис', + 'city' => 'Город', + 'state' => 'Район', + 'postal_code' => 'Почтовый код', + 'country_id' => 'Страна', + 'contacts' => 'Контакты', + 'first_name' => 'Имя', + 'last_name' => 'Фамилия', + 'phone' => 'Телефон', + 'email' => 'Эл. почта', + 'additional_info' => 'Дополнительная информация', + 'payment_terms' => 'Условия оплаты', + 'currency_id' => 'Валюта', + 'size_id' => 'Размер компании', + 'industry_id' => 'Индустрия', + 'private_notes' => 'Персональные заметки', + 'invoice' => 'Счёт', + 'client' => 'Клиент', + 'invoice_date' => 'Дата счёта', + 'due_date' => 'Срок оплаты', + 'invoice_number' => 'Номер счёта', + 'invoice_number_short' => '№ счёта', + 'po_number' => 'Номер платежного поручения', + 'po_number_short' => '№ платёжного поручения', + 'frequency_id' => 'Как часто', + 'discount' => 'Скидка', + 'taxes' => 'Налоги', + 'tax' => 'Налог', + 'item' => 'Название', + 'description' => 'Описание', + 'unit_cost' => 'Стоимость за единицу', + 'quantity' => 'Количество', + 'line_total' => 'Всего', + 'subtotal' => 'Промежуточный итог', + 'paid_to_date' => 'Оплачено', + 'balance_due' => 'Неоплачено', + 'invoice_design_id' => 'Дизайн', + 'terms' => 'Условия', + 'your_invoice' => 'Ваш счёт', + 'remove_contact' => 'Удалить контакт', + 'add_contact' => 'Добавить контакт', + 'create_new_client' => 'Создать нового клиента', + 'edit_client_details' => 'Изменить детали клиента', + 'enable' => 'Включить', + 'learn_more' => 'Узнать больше', + 'manage_rates' => 'Управлять ставками', + 'note_to_client' => 'Примечание клиенту', + 'invoice_terms' => 'Условия счёта', + 'save_as_default_terms' => 'Сохранить как условия по умлочанию', + 'download_pdf' => 'Скачать PDF', + 'pay_now' => 'Оплатить сейчас', + 'save_invoice' => 'Сохранить счёт', + 'clone_invoice' => 'Копировать в Счёт', + 'archive_invoice' => 'Архивировать счёт', + 'delete_invoice' => 'Удалить счёт', + 'email_invoice' => 'Отправить счёт', + 'enter_payment' => 'Добавить оплату', + 'tax_rates' => 'Налоговые ставки', + 'rate' => 'Ставка', + 'settings' => 'Настройки', + 'enable_invoice_tax' => 'Включить указание налога на накладную', + 'enable_line_item_tax' => 'Включить указание налогов по позициям', + 'dashboard' => 'Главная', + 'dashboard_totals_in_all_currencies_help' => 'Примечание: добавьте :link с именем ":name", чтобы показать итоги в единой базовой валюте.', + 'clients' => 'Клиенты', + 'invoices' => 'Счета', + 'payments' => 'Оплаты', + 'credits' => 'Кредиты', + 'history' => 'История', + 'search' => 'Искать', + 'sign_up' => 'Зарегистрироваться', + 'guest' => 'Гость', + 'company_details' => 'Детали компании', + 'online_payments' => 'Онлайн платежи', + 'notifications' => 'Оповещения', + 'import_export' => 'Импорт | Экспорт', + 'done' => 'Готово', + 'save' => 'Сохранить', + 'create' => 'Создать', + 'upload' => 'Загрузить', + 'import' => 'Импорт', + 'download' => 'Скачать', + 'cancel' => 'Отмена', + 'close' => 'Закрыть', + 'provide_email' => 'Введите правильный адрес эл. почты', + 'powered_by' => 'Разработано', + 'no_items' => 'Нет товаров', + 'recurring_invoices' => 'Повторяющиеся счета', + 'recurring_help' => '

Автоматически отправлять клиентам одни и те же счета-фактуры еженедельно, раз в два месяца, ежемесячно, ежеквартально или ежегодно.

+

Используйте :MONTH, :QUARTER или :YEAR для динамических дат. Базовая математика также работает, например, :MONTH-1.

+

Примеры динамических переменных счета:

+', + 'recurring_quotes' => 'Повторяющиеся Прайс-листы', + 'in_total_revenue' => 'в общем доходе', + 'billed_client' => 'Выставленный счет', + 'billed_clients' => 'Выставленные счета', + 'active_client' => 'активный клиент', + 'active_clients' => 'активные клиенты', + 'invoices_past_due' => 'Просроченные счета', + 'upcoming_invoices' => 'Текущие счета', + 'average_invoice' => 'Средний счёт', + 'archive' => 'Архивировать', + 'delete' => 'Удалить', + 'archive_client' => 'Архивировать клиента', + 'delete_client' => 'Удалить клиента', + 'archive_payment' => 'Архивировать оплату', + 'delete_payment' => 'Удалить оплату', + 'archive_credit' => 'Архивировать кредит', + 'delete_credit' => 'Удалить кредит', + 'show_archived_deleted' => 'Показать архивированные/удалённые', + 'filter' => 'Фильтр', + 'new_client' => 'Новый клиент', + 'new_invoice' => 'Новый счёт', + 'new_payment' => 'Добавить оплату', + 'new_credit' => 'Добавить кредит', + 'contact' => 'Контакт', + 'date_created' => 'Дата создания', + 'last_login' => 'Последний вход', + 'balance' => 'К оплате', + 'action' => 'Действие', + 'status' => 'Статус', + 'invoice_total' => 'Итого счёта', + 'frequency' => 'Периодичность', + 'range' => 'Диапазон', + 'start_date' => 'Дата начала', + 'end_date' => 'Дата завершения', + 'transaction_reference' => 'Референс транзакции', + 'method' => 'Метод', + 'payment_amount' => 'Сумма платежа', + 'payment_date' => 'Дата платежа', + 'credit_amount' => 'Сумма кредита', + 'credit_balance' => 'Баланс кредита', + 'credit_date' => 'Дата кредита', + 'empty_table' => 'Нет данных в таблице', + 'select' => 'Выбрать', + 'edit_client' => 'Изменить клиента', + 'edit_invoice' => 'Изменить счёт', + 'create_invoice' => 'Создать счёт', + 'enter_credit' => 'Добавить кредит', + 'last_logged_in' => 'Последний вход', + 'details' => 'Детали', + 'standing' => 'Состояние', + 'credit' => 'Кредит', + 'activity' => 'Активность', + 'date' => 'Дата', + 'message' => 'Сообщение', + 'adjustment' => 'Корректировка', + 'are_you_sure' => 'Вы уверены?', + 'payment_type_id' => 'Способ оплаты', + 'amount' => 'Всего', + 'work_email' => 'Эл. почта', + 'language_id' => 'Язык', + 'timezone_id' => 'Временная зона', + 'date_format_id' => 'Формат даты', + 'datetime_format_id' => 'Формат даты/время', + 'users' => 'Пользователи', + 'localization' => 'Локализация', + 'remove_logo' => 'Удалить логотип', + 'logo_help' => 'Поддерживается: JPEG, GIF и PNG', + 'payment_gateway' => 'Платежный шлюз', + 'gateway_id' => 'Платёжный шлюз', + 'email_notifications' => 'Уведомления по электронной почте', + 'email_sent' => 'Присылать е-мейл когда счёт отправлен', + 'email_viewed' => 'Присылать е-мейл когда счёт просмотрен', + 'email_paid' => 'Присылать е-мейл когда счёт оплачен', + 'site_updates' => 'Обновления сайта', + 'custom_messages' => 'Пользовательские сообщения', + 'default_email_footer' => 'Установить эл. подпись по умолчанию', + 'select_file' => 'Укажите файл', + 'first_row_headers' => 'Использовать первую строку в качестве заголовков', + 'column' => 'Столбец', + 'sample' => 'Пример', + 'import_to' => 'Импорт в', + 'client_will_create' => 'клиент будет создан', + 'clients_will_create' => 'клиенты будут созданы', + 'email_settings' => 'Настройки эл. почты', + 'client_view_styling' => 'Стиль просмотра клиента', + 'pdf_email_attachment' => 'Загрузить PDF', + 'custom_css' => 'Пользовательские CSS', + 'import_clients' => 'Импорт данных клиента', + 'csv_file' => 'CSV-файл', + 'export_clients' => 'Экспорт данных клиента', + 'created_client' => 'Клиент успешно создан', + 'created_clients' => 'Успешно создано :count клиента(ов)', + 'updated_settings' => 'Настройки успешно обновлены', + 'removed_logo' => 'Логотип успешно удалён', + 'sent_message' => 'Сообщение успешно отправлено', + 'invoice_error' => 'Обязательно выберите клиента и исправьте ошибки.', + 'limit_clients' => 'Извините, это превысит лимит :count клиента(ов)', + 'payment_error' => 'Произошла ошибка при обработке вашего платежа. Пожалуйста, повторите попытку позже.', + 'registration_required' => 'Пожалуйста, зарегистрируйтесь, чтобы отправить счет', + 'confirmation_required' => 'Пожалуйста, подтвердите свой адрес электронной почты, :link, чтобы отправить письмо с подтверждением ещё раз.', + 'updated_client' => 'Клиент успешно обновлён', + 'archived_client' => 'Клиент успешно архивирован', + 'archived_clients' => 'Успешно архивировано :count клиента(ов)', + 'deleted_client' => 'Клиент успешно удалён', + 'deleted_clients' => 'Успешно удалено :count клиента(ов)', + 'updated_invoice' => 'Счет успешно обновлён', + 'created_invoice' => 'Счет успешно создан', + 'cloned_invoice' => 'Счет успешно скопирован', + 'emailed_invoice' => 'Счет успешно отправлен по почте', + 'and_created_client' => 'и создан клиент', + 'archived_invoice' => 'Счет успешно архивирован', + 'archived_invoices' => 'Успешно архивировано :count счта(ов)', + 'deleted_invoice' => 'Счет успешно удалён', + 'deleted_invoices' => 'Успешно удалено :count счта(ов)', + 'created_payment' => 'Платёж успешно создан', + 'created_payments' => 'Успешно создано :count платежа(ей)', + 'archived_payment' => 'Платёж успешно архивирован', + 'archived_payments' => 'Успешно архивировано :count платежа(ей)', + 'deleted_payment' => 'Платёж успешно удалён', + 'deleted_payments' => 'Успешно удалено :count платежа(ей)', + 'applied_payment' => 'Платёж успешно принят', + 'created_credit' => 'Кредит успешно создан', + 'archived_credit' => 'Кредит успешно архивирован', + 'archived_credits' => 'Успешно архивировано :count кредита(ов)', + 'deleted_credit' => 'Кредит успешно удален', + 'deleted_credits' => 'Успешно удалено :count кредита(ов)', + 'imported_file' => 'Файл успешно импортирован', + 'updated_vendor' => 'Поставщик успешно обновлён', + 'created_vendor' => 'Поставщик успешно создан', + 'archived_vendor' => 'Поставщик успешно архивирован', + 'archived_vendors' => 'Успешно архивировано :count поставщика(ов)', + 'deleted_vendor' => 'Поставщик успешно удалён', + 'deleted_vendors' => 'Успешно удалено :count поставщика(ов)', + 'confirmation_subject' => 'Подтверждение учетной записи Invoice Ninja', + 'confirmation_header' => 'Подтверждение учетной записи', + 'confirmation_message' => 'Чтобы подтвердить свою учетную запись, перейдите по ссылке ниже.', + 'invoice_subject' => 'Новый счет :number от :account', + 'invoice_message' => 'Чтобы просмотреть свой счет за :amount, нажмите ссылку ниже.', + 'payment_subject' => 'Оплата получена', + 'payment_message' => 'Спасибо за платёжь на сумму :amount.', + 'email_salutation' => 'Дорогой :name,', + 'email_signature' => 'С Уважением,', 'email_from' => 'The Invoice Ninja Team', - 'invoice_link_message' => 'To view the invoice click the link below:', - 'notification_invoice_paid_subject' => 'Invoice :invoice was paid by :client', - 'notification_invoice_sent_subject' => 'Invoice :invoice was sent to :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_sent' => 'The following client :client was emailed 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:', - 'secure_payment' => 'Secure Payment', - 'card_number' => 'Card Number', - 'expiration_month' => 'Expiration Month', - 'expiration_year' => 'Expiration Year', + 'invoice_link_message' => 'Чтобы просмотреть счет, нажмите на ссылку ниже:', + 'notification_invoice_paid_subject' => 'Счёт :invoice оплатил :client', + 'notification_invoice_sent_subject' => 'Счёт :invoice отправлен :client', + 'notification_invoice_viewed_subject' => 'Счёт :invoice просмотрен :client', + 'notification_invoice_paid' => 'Оплата :amount была выполнена клиентом :client по счету :invoice.', + 'notification_invoice_sent' => 'Клиенту :client было отправлено электронное письмо со счетом :invoice на сумму :amount.', + 'notification_invoice_viewed' => 'Клиент :client просмотрел счет :invoice на сумму :amount.', + 'reset_password' => 'Вы можете сбросить пароль своей учетной записи, нажав следующую кнопку:', + 'secure_payment' => 'Безопасная оплата', + 'card_number' => 'Номер карты', + 'expiration_month' => 'Месяц окончания', + 'expiration_year' => 'Год окончания', 'cvv' => 'CVV', - 'logout' => 'Log Out', - 'sign_up_to_save' => 'Sign up to save your work', - 'agree_to_terms' => 'I agree to the :terms', - 'terms_of_service' => 'Terms of Service', - 'email_taken' => 'The email address is already registered', - 'working' => 'Working', - 'success' => 'Success', - 'success_message' => 'You have successfully registered! Please visit the link in the account confirmation email to verify your email address.', - 'erase_data' => 'Your account is not registered, this will permanently erase your data.', - 'password' => 'Password', - 'pro_plan_product' => 'Pro Plan', - 'pro_plan_success' => 'Thanks for choosing Invoice Ninja\'s Pro plan!

 
- Next Steps

A payable invoice has been sent to the email - address associated with your account. To unlock all of the awesome - Pro features, please follow the instructions on the invoice to pay - for a year of Pro-level invoicing.

- Can\'t find the invoice? Need further assistance? We\'re happy to help - -- email us at contact@invoiceninja.com', - 'unsaved_changes' => 'You have unsaved changes', - 'custom_fields' => 'Custom Fields', - 'company_fields' => 'Company Fields', - 'client_fields' => 'Client Fields', - 'field_label' => 'Field Label', - 'field_value' => 'Field Value', - 'edit' => 'Edit', - 'set_name' => 'Set your company name', - 'view_as_recipient' => 'View as recipient', - 'product_library' => 'Product Library', - 'product' => 'Product', - 'products' => 'Products', - 'fill_products' => 'Auto-fill products', - 'fill_products_help' => 'Selecting a product will automatically fill in the description and cost', - 'update_products' => 'Auto-update products', - 'update_products_help' => 'Updating an invoice will automatically update the product library', - 'create_product' => 'Add Product', - 'edit_product' => 'Edit Product', - 'archive_product' => 'Archive Product', - 'updated_product' => 'Successfully updated product', - 'created_product' => 'Successfully created product', - 'archived_product' => 'Successfully archived product', - 'pro_plan_custom_fields' => ':link to enable custom fields by joining the Pro Plan', - 'advanced_settings' => 'Advanced Settings', - 'pro_plan_advanced_settings' => ':link to enable the advanced settings by joining the Pro Plan', - 'invoice_design' => 'Invoice Design', - 'specify_colors' => 'Specify colors', - 'specify_colors_label' => 'Select the colors used in the invoice', - 'chart_builder' => 'Chart Builder', + 'logout' => 'Выйти', + 'sign_up_to_save' => 'Зарегистрируйтесь, чтобы сохранить свою работу', + 'agree_to_terms' => 'Я согласен с условиями Invoice Ninja :terms ', + 'terms_of_service' => 'Условия использования', + 'email_taken' => 'Адрес электронной почты уже зарегистрирован', + 'working' => 'В работе', + 'success' => 'Удачно', + 'success_message' => 'Вы успешно зарегистрировались! Чтобы подтвердить свой адрес электронной почты, перейдите по ссылке в электронном письме с подтверждением учетной записи.', + 'erase_data' => 'Ваша учетная запись не зарегистрирована, это навсегда удалит ваши данные.', + 'password' => 'Пароль', + 'pro_plan_product' => 'Pro План', + 'pro_plan_success' => 'Спасибо, что выбрали Pro план Invoice Ninja!

 
+Следующий шаг

Счет на оплату был отправлен по электронной почте +на адрес, связанный с вашей учетной записью. Чтобы разблокировать все потрясающие + функции Pro плана, следуйте инструкциям в счете, чтобы заплатить + за год Pro-уровня.

+Не можете найти счет? Нужна дополнительная помощь? Мы будем рады помочь +-- напишите нам письмо на contact@invoiceninja.com', + 'unsaved_changes' => 'У вас есть несохраненные изменения', + 'custom_fields' => 'Настраиваемые поля', + 'company_fields' => 'Поля компании', + 'client_fields' => 'Поля клиента', + 'field_label' => 'Поле надписи', + 'field_value' => 'Поле значения', + 'edit' => 'Редактировать', + 'set_name' => 'Укажите название своей компании', + 'view_as_recipient' => 'Просмотреть как получатель', + 'product_library' => 'Библиотека товаров/услуг', + 'product' => 'Товар/услуга', + 'products' => 'Товары/Услуги', + 'fill_products' => 'Автозаполнение товаров/услуг', + 'fill_products_help' => 'Выбор товара/услуги автоматически заполнит описание и стоимость', + 'update_products' => 'Автообновление товаров/услуг', + 'update_products_help' => 'Обновление счета автоматически обновит библиотеку товаров/услуг', + 'create_product' => 'Добавить товар/услугу', + 'edit_product' => 'Редактировать товар/услугу', + 'archive_product' => 'Архивировать товар/услугу', + 'updated_product' => 'Информация о товаре/услуге успешно обновлёна', + 'created_product' => 'Товар/услуга успешно создан', + 'archived_product' => 'Товар/услуга перенесен в архив', + 'pro_plan_custom_fields' => ':link настройте поля, оформив подписку', + 'advanced_settings' => 'Расширенные настройки', + 'pro_plan_advanced_settings' => ':link откройте расширенные настройки, оформив подписку', + 'invoice_design' => 'Дизайн счёта', + 'specify_colors' => 'Настроить цвета', + 'specify_colors_label' => 'Выбрать цвета, используемые в счете', + 'chart_builder' => 'Конструктор диаграмм', 'ninja_email_footer' => 'Created by :site | Create. Send. Get Paid.', - 'go_pro' => 'Go Pro', - 'quote' => 'Quote', - 'quotes' => 'Quotes', - 'quote_number' => 'Quote Number', - 'quote_number_short' => 'Quote #', - 'quote_date' => 'Quote Date', - 'quote_total' => 'Quote Total', - 'your_quote' => 'Your Quote', - 'total' => 'Total', - 'clone' => 'Clone', - 'new_quote' => 'New Quote', - 'create_quote' => 'Create Quote', - 'edit_quote' => 'Edit Quote', - 'archive_quote' => 'Archive Quote', - 'delete_quote' => 'Delete Quote', - 'save_quote' => 'Save Quote', - 'email_quote' => 'Email Quote', - 'clone_quote' => 'Clone To Quote', - 'convert_to_invoice' => 'Convert to Invoice', - 'view_invoice' => 'View Invoice', - 'view_client' => 'View Client', - 'view_quote' => 'View Quote', - 'updated_quote' => 'Successfully updated quote', - 'created_quote' => 'Successfully created quote', - 'cloned_quote' => 'Successfully cloned quote', - 'emailed_quote' => 'Successfully emailed quote', - 'archived_quote' => 'Successfully archived quote', - 'archived_quotes' => 'Successfully archived :count quotes', - 'deleted_quote' => 'Successfully deleted quote', + 'go_pro' => 'Оформите Pro-подписку', + 'quote' => 'Котировка', + 'quotes' => 'Прайс-листы', + 'quote_number' => 'Номер котировки', + 'quote_number_short' => 'Номер котировки', + 'quote_date' => 'Дата котировки', + 'quote_total' => 'Всего', + 'your_quote' => 'Ваша Котировка', + 'total' => 'Всего', + 'clone' => 'Копировать', + 'new_quote' => 'Новая котировка', + 'create_quote' => 'Создать котировку', + 'edit_quote' => 'Изменить котировку', + 'archive_quote' => 'Архивировать котировку', + 'delete_quote' => 'Удалить котировку', + 'save_quote' => 'Сохранить котировку', + 'email_quote' => 'Отправить прайс-лист', + 'clone_quote' => 'Копировать в Котировку', + 'convert_to_invoice' => 'Конвертировать в счёт', + 'view_invoice' => 'Посмотреть счет', + 'view_client' => 'Просмотр клиента', + 'view_quote' => 'Просмотреть Котировку', + 'updated_quote' => 'Прайс-лист успешно обновлён', + 'created_quote' => 'Прайс-лист успешно создан', + 'cloned_quote' => 'Прайс-лист успешно скопирован', + 'emailed_quote' => 'Прайс-лист успешно отправлен', + 'archived_quote' => 'Прайс-лист перемещен в архив', + 'archived_quotes' => 'Перенесено в архив :count котировок', + 'deleted_quote' => 'Котировка успешно удалена', 'deleted_quotes' => 'Successfully deleted :count quotes', 'converted_to_invoice' => 'Successfully converted quote to invoice', 'quote_subject' => 'New quote :number from :account', @@ -345,403 +345,403 @@ $LANG = array( '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_viewed' => 'The following client :client viewed Quote :invoice for :amount.', - 'session_expired' => 'Your session has expired.', - 'invoice_fields' => 'Invoice Fields', - 'invoice_options' => 'Invoice Options', - 'hide_paid_to_date' => 'Hide Paid to Date', - 'hide_paid_to_date_help' => 'Only display the "Paid to Date" area on your invoices once a payment has been received.', - 'charge_taxes' => 'Charge taxes', - 'user_management' => 'User Management', - 'add_user' => 'Add User', - 'send_invite' => 'Send Invitation', - 'sent_invite' => 'Successfully sent invitation', - 'updated_user' => 'Successfully updated user', - 'invitation_message' => 'You\'ve been invited by :invitor. ', - 'register_to_add_user' => 'Please sign up to add a user', - 'user_state' => 'State', - 'edit_user' => 'Edit User', - 'delete_user' => 'Delete User', - 'active' => 'Active', - 'pending' => 'Pending', - 'deleted_user' => 'Successfully deleted user', - '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_recurring_email_invoice' => 'Are you sure you want this invoice emailed?', + 'session_expired' => 'Сеанс завершен', + 'invoice_fields' => 'Поля счёта', + 'invoice_options' => 'Настройки счета', + 'hide_paid_to_date' => 'Скрыть "Оплатить до"', + 'hide_paid_to_date_help' => 'Показывать только «Оплатить до» в ваших счетах после получения платежа.', + 'charge_taxes' => 'Расчёт налогов', + 'user_management' => 'Управление пользователями', + 'add_user' => 'Добавить пользователя', + 'send_invite' => 'Отправить приглашение', + 'sent_invite' => 'Приглашение успешно отправлено', + 'updated_user' => 'Профиль пользователя успешно обновлён', + 'invitation_message' => 'Вы получили приглашение от :invitor. ', + 'register_to_add_user' => 'Войдите, чтобы добавить пользователя', + 'user_state' => 'Страна', + 'edit_user' => 'Редактировать', + 'delete_user' => 'Удалить пользователя', + 'active' => 'Активный', + 'pending' => 'Ожидающий', + 'deleted_user' => 'Пользователь удалён', + 'confirm_email_invoice' => 'Вы уверены, что хотите отправить счет по почте?', + 'confirm_email_quote' => 'Вы уверены, что хотите отправить прайс-лист по почте?', + 'confirm_recurring_email_invoice' => 'Вы уверены, что хотите отправить счет по почте?', 'confirm_recurring_email_invoice_not_sent' => 'Are you sure you want to start the recurrence?', - 'cancel_account' => 'Delete Account', - 'cancel_account_message' => 'Warning: This will permanently delete your account, there is no undo.', - 'go_back' => 'Go Back', - 'data_visualizations' => 'Data Visualizations', - 'sample_data' => 'Sample data shown', - 'hide' => 'Hide', - 'new_version_available' => 'A new version of :releases_link is available. You\'re running v:user_version, the latest is v:latest_version', - 'invoice_settings' => 'Invoice Settings', - 'invoice_number_prefix' => 'Invoice Number Prefix', - 'invoice_number_counter' => 'Invoice Number Counter', + 'cancel_account' => 'Удалить аккаунт', + 'cancel_account_message' => 'Внимание: это приведет к безвозвратному удалению вашего аккаунта.', + 'go_back' => 'Назад', + 'data_visualizations' => 'Представление данных', + 'sample_data' => 'Показаны образцы данных', + 'hide' => 'Скрыть', + 'new_version_available' => 'Доступна новая версия :releases_link. Вы используете v:user_version, последняя v:latest_version', + 'invoice_settings' => 'Настройки счёта', + 'invoice_number_prefix' => 'Префикс номера счёта', + 'invoice_number_counter' => 'Счетчик номера счёта', 'quote_number_prefix' => 'Quote Number Prefix', 'quote_number_counter' => 'Quote Number Counter', 'share_invoice_counter' => 'Share invoice counter', - 'invoice_issued_to' => 'Invoice issued to', - 'invalid_counter' => 'To prevent a possible conflict please set either an invoice or quote number prefix', - 'mark_sent' => 'Mark Sent', - 'gateway_help_1' => ':link to sign up for Authorize.net.', - 'gateway_help_2' => ':link to sign up for Authorize.net.', - 'gateway_help_17' => ':link to get your PayPal API signature.', - 'gateway_help_27' => ':link to sign up for 2Checkout.com. To ensure payments are tracked set :complete_link as the redirect URL under Account > Site Management in the 2Checkout portal.', + 'invoice_issued_to' => 'Счёт выставлен', + 'invalid_counter' => 'Для предотвращения конфликта, пожалуйста, установите префикс номера счета или котировки', + 'mark_sent' => 'Отметить отправленным', + 'gateway_help_1' => ':link зарегистрироваться на Authorize.net.', + 'gateway_help_2' => ':link зарегистрироваться на Authorize.net.', + 'gateway_help_17' => ':link получите API-подпись PayPal .', + 'gateway_help_27' => ':link для регистрации на 2Checkout.com. Чтобы обеспечить отслеживание платежей, установите: complete_link в качестве URL-адреса переадресации в разделе «Учетная запись»> «Управление сайтом» на портале «2Checkout».', 'gateway_help_60' => ':link to create a WePay account.', - 'more_designs' => 'More designs', - 'more_designs_title' => 'Additional Invoice Designs', - 'more_designs_cloud_header' => 'Go Pro for more invoice designs', + 'more_designs' => 'Больше шаблонов', + 'more_designs_title' => 'Дополнительные шаблоны счетов', + 'more_designs_cloud_header' => 'Оформите Pro-подписку, чтобы получить новые шаблоны', 'more_designs_cloud_text' => '', 'more_designs_self_host_text' => '', - 'buy' => 'Buy', - 'bought_designs' => 'Successfully added additional invoice designs', - 'sent' => 'Sent', - 'vat_number' => 'VAT Number', - 'timesheets' => 'Timesheets', - 'payment_title' => 'Enter Your Billing Address and Credit Card information', + 'buy' => 'Купить', + 'bought_designs' => 'Добавлены дополнительные шаблоны счетов', + 'sent' => 'Отправить', + 'vat_number' => ' регистрационный номер плательщика НДС', + 'timesheets' => 'Табель времени', + 'payment_title' => 'Укажите адрес для выставления счетов и информацию о кредитной карте', 'payment_cvv' => '*This is the 3-4 digit number on the back of your card', - 'payment_footer1' => '*Billing address must match address associated with credit card.', - 'payment_footer2' => '*Please click "PAY NOW" only once - transaction may take up to 1 minute to process.', - 'id_number' => 'ID Number', + 'payment_footer1' => '*Адрес должен совпадать с адресом карты', + 'payment_footer2' => '* Пожалуйста, нажмите «Оплатить» только один раз - транзакция может занять до 1 минуты.', + 'id_number' => 'Идентификационный номер', 'white_label_link' => 'White label', 'white_label_header' => 'White Label', - 'bought_white_label' => 'Successfully enabled white label license', + 'bought_white_label' => 'Успешно активирована лицензия White Label', 'white_labeled' => 'White labeled', - 'restore' => 'Restore', - 'restore_invoice' => 'Restore Invoice', + 'restore' => 'Восстановить', + 'restore_invoice' => 'Восстановить счёт', 'restore_quote' => 'Restore Quote', - 'restore_client' => 'Restore Client', - 'restore_credit' => 'Restore Credit', - 'restore_payment' => 'Restore Payment', - 'restored_invoice' => 'Successfully restored invoice', + 'restore_client' => 'Восстановить клиента', + 'restore_credit' => 'Восстановить кредит', + 'restore_payment' => 'Восстановить платёж', + 'restored_invoice' => 'Счёт успешно восстановлен', 'restored_quote' => 'Successfully restored quote', - 'restored_client' => 'Successfully restored client', - 'restored_payment' => 'Successfully restored payment', - 'restored_credit' => 'Successfully restored credit', + 'restored_client' => 'Клиент восстановлен', + 'restored_payment' => 'Платёж восстановлен', + 'restored_credit' => 'Кредит восстановлен', 'reason_for_canceling' => 'Help us improve our site by telling us why you\'re leaving.', - 'discount_percent' => 'Percent', - 'discount_amount' => 'Amount', - 'invoice_history' => 'Invoice History', - 'quote_history' => 'Quote History', - 'current_version' => 'Current version', - 'select_version' => 'Select version', - 'view_history' => 'View History', - 'edit_payment' => 'Edit Payment', - 'updated_payment' => 'Successfully updated payment', - 'deleted' => 'Deleted', - 'restore_user' => 'Restore User', - 'restored_user' => 'Successfully restored user', - 'show_deleted_users' => 'Show deleted users', - 'email_templates' => 'Email Templates', - 'invoice_email' => 'Invoice Email', - 'payment_email' => 'Payment Email', + 'discount_percent' => 'Процент', + 'discount_amount' => 'Всего', + 'invoice_history' => 'История счёта', + 'quote_history' => 'История котировок', + 'current_version' => 'Текущая версия', + 'select_version' => 'Выбрать версию', + 'view_history' => 'Просмотр истории', + 'edit_payment' => 'Редактировать оплату', + 'updated_payment' => 'Платёж успешно обновлён', + 'deleted' => 'Удален', + 'restore_user' => 'Восстановить пользователя', + 'restored_user' => 'Пользователь успешно восстановлен', + 'show_deleted_users' => 'Показать удалённых пользователей', + 'email_templates' => 'Шаблоны писем', + 'invoice_email' => 'Письмо', + 'payment_email' => 'Платежный адрес эл. почты', 'quote_email' => 'Quote Email', - 'reset_all' => 'Reset All', - 'approve' => 'Approve', + 'reset_all' => 'Сбросить всё', + 'approve' => 'Одобрить', 'token_billing_type_id' => 'Token Billing', - 'token_billing_help' => 'Store payment details with WePay, Stripe, Braintree or GoCardless.', - 'token_billing_1' => 'Disabled', - 'token_billing_2' => 'Opt-in - checkbox is shown but not selected', - 'token_billing_3' => 'Opt-out - checkbox is shown and selected', - 'token_billing_4' => 'Always', - 'token_billing_checkbox' => 'Store credit card details', - 'view_in_gateway' => 'View in :gateway', - 'use_card_on_file' => 'Use Card on File', - 'edit_payment_details' => 'Edit payment details', - 'token_billing' => 'Save card details', - 'token_billing_secure' => 'The data is stored securely by :link', - 'support' => 'Support', - 'contact_information' => 'Contact Information', - '256_encryption' => '256-Bit Encryption', - 'amount_due' => 'Amount due', - 'billing_address' => 'Billing Address', - 'billing_method' => 'Billing Method', - 'order_overview' => 'Order overview', - 'match_address' => '*Address must match address associated with credit card.', - 'click_once' => '*Please click "PAY NOW" only once - transaction may take up to 1 minute to process.', - 'invoice_footer' => 'Invoice Footer', - 'save_as_default_footer' => 'Save as default footer', + 'token_billing_help' => 'Храните данные о платежах с помощью WePay, Stripe, Braintree или GoCardless.', + 'token_billing_1' => 'Отключен', + 'token_billing_2' => 'Флажок «Нет в наличии» отображается, но не отмечен.', + 'token_billing_3' => 'Флажок «Нет в наличии» отображается и отмечен.', + 'token_billing_4' => 'Всегда', + 'token_billing_checkbox' => 'Сохранить данные кредитной карты', + 'view_in_gateway' => 'Просмотр через :gateway', + 'use_card_on_file' => 'Используйте карту или файл', + 'edit_payment_details' => 'Изменить платежные данные', + 'token_billing' => 'Сохранить данные карты', + 'token_billing_secure' => 'Данные хранятся безопасно: link', + 'support' => 'Поддержка', + 'contact_information' => 'Контактная информация', + '256_encryption' => '256-битное шифрование', + 'amount_due' => 'Сумма долга', + 'billing_address' => 'Адрес для выставления счетов', + 'billing_method' => 'Способ оплаты', + 'order_overview' => 'Обзор заказа', + 'match_address' => '*Адрес должен совпадать с адресом карты', + 'click_once' => '* Пожалуйста, нажмите «Оплатить» только один раз - транзакция может занять до 1 минуты.', + 'invoice_footer' => 'Нижний колонтитул счета', + 'save_as_default_footer' => 'Сделать колонтитулом по умолчанию', 'token_management' => 'Token Management', - 'tokens' => 'Tokens', - 'add_token' => 'Add Token', - 'show_deleted_tokens' => 'Show deleted tokens', - 'deleted_token' => 'Successfully deleted token', - 'created_token' => 'Successfully created token', - 'updated_token' => 'Successfully updated token', - 'edit_token' => 'Edit Token', - 'delete_token' => 'Delete Token', - 'token' => 'Token', - 'add_gateway' => 'Add Gateway', - 'delete_gateway' => 'Delete Gateway', - 'edit_gateway' => 'Edit Gateway', - 'updated_gateway' => 'Successfully updated gateway', - 'created_gateway' => 'Successfully created gateway', - 'deleted_gateway' => 'Successfully deleted gateway', + 'tokens' => 'Токены', + 'add_token' => 'Добавить Токен', + 'show_deleted_tokens' => 'Показать удалённый токены', + 'deleted_token' => 'Токен успешно удалён', + 'created_token' => 'Токен создан', + 'updated_token' => 'Токен обновлён', + 'edit_token' => 'Изменить права', + 'delete_token' => 'Удалить права', + 'token' => 'Права', + 'add_gateway' => 'Добавить платёжный шлюз', + 'delete_gateway' => 'Удалить платежный шлюз', + 'edit_gateway' => 'Изменить платёжный шлюз', + 'updated_gateway' => 'Платёжный шлюз успешно обновлён', + 'created_gateway' => 'Платёжный шлюз успешно создан', + 'deleted_gateway' => 'Платёжный шлюз успешно удалён', 'pay_with_paypal' => 'PayPal', - 'pay_with_card' => 'Credit Card', - 'change_password' => 'Change password', - 'current_password' => 'Current password', - 'new_password' => 'New password', - 'confirm_password' => 'Confirm password', - 'password_error_incorrect' => 'The current password is incorrect.', - 'password_error_invalid' => 'The new password is invalid.', - 'updated_password' => 'Successfully updated password', - 'api_tokens' => 'API Tokens', - 'users_and_tokens' => 'Users & Tokens', - 'account_login' => 'Account Login', - 'recover_password' => 'Recover your password', - 'forgot_password' => 'Forgot your password?', - 'email_address' => 'Email address', - 'lets_go' => 'Let\'s go', - 'password_recovery' => 'Password Recovery', - 'send_email' => 'Send Email', - 'set_password' => 'Set Password', - 'converted' => 'Converted', - 'email_approved' => 'Email me when a quote is approved', + 'pay_with_card' => 'Кредитная карта', + 'change_password' => 'Изменить пароль', + 'current_password' => 'Текущий пароль', + 'new_password' => 'Новый пароль', + 'confirm_password' => 'Подтвердите пароль', + 'password_error_incorrect' => 'Текущий пароль неверный', + 'password_error_invalid' => 'Новый пароль неверный', + 'updated_password' => 'Пароль успешно обновлён', + 'api_tokens' => 'API токены', + 'users_and_tokens' => 'Пользователи и права', + 'account_login' => 'Логин', + 'recover_password' => 'Восстановить пароль', + 'forgot_password' => 'Забыли пароль?', + 'email_address' => 'Адрес эл.почты', + 'lets_go' => 'Вперед', + 'password_recovery' => 'Восстановление пароля', + 'send_email' => 'Отправить эл.почту', + 'set_password' => 'Установить пароль', + 'converted' => 'Преобразован', + 'email_approved' => 'Сообщать по почте, когда котировка одобрена', 'notification_quote_approved_subject' => 'Quote :invoice was approved by :client', - 'notification_quote_approved' => 'The following client :client approved Quote :invoice for :amount.', - 'resend_confirmation' => 'Resend confirmation email', - 'confirmation_resent' => 'The confirmation email was resent', - 'gateway_help_42' => ':link to sign up for BitPay.
Note: use a Legacy API Key, not an API token.', - 'payment_type_credit_card' => 'Credit Card', + 'notification_quote_approved' => 'Клиент :client одобрил счет :invoice на сумму :amount.', + 'resend_confirmation' => 'Отправить письмо для подтверждения еще раз', + 'confirmation_resent' => 'Письмо для подтверждения было заново отправлено', + 'gateway_help_42' => ':link для регистрации на BitPay.
Примечание: используйте API-интерфейс Legacy API, а не токен API.', + 'payment_type_credit_card' => 'Кредитная карта', 'payment_type_paypal' => 'PayPal', - 'payment_type_bitcoin' => 'Bitcoin', + 'payment_type_bitcoin' => 'Биткоин', 'payment_type_gocardless' => 'GoCardless', - 'knowledge_base' => 'Knowledge Base', - 'partial' => 'Partial/Deposit', - 'partial_remaining' => ':partial of :balance', - 'more_fields' => 'More Fields', - 'less_fields' => 'Less Fields', - 'client_name' => 'Client Name', - 'pdf_settings' => 'PDF Settings', - 'product_settings' => 'Product Settings', + 'knowledge_base' => 'База знаний', + 'partial' => 'Частичная оплата', + 'partial_remaining' => ':partial из :balance', + 'more_fields' => 'Доп. поля', + 'less_fields' => 'Скрыть поля', + 'client_name' => 'Имя клиента', + 'pdf_settings' => 'Настройки PDF', + 'product_settings' => 'Настройки товара/услуги', 'auto_wrap' => 'Auto Line Wrap', - 'duplicate_post' => 'Warning: the previous page was submitted twice. The second submission had been ignored.', - 'view_documentation' => 'View Documentation', - 'app_title' => 'Free Open-Source Online Invoicing', - 'app_description' => 'Invoice Ninja is a free, open-source solution for invoicing and billing customers. With Invoice Ninja, you can easily build and send beautiful invoices from any device that has access to the web. Your clients can print your invoices, download them as pdf files, and even pay you online from within the system.', - 'rows' => 'rows', + 'duplicate_post' => 'Предупреждение: предыдущая страница была отправлена дважды. Повторная отправка была отклонена.', + 'view_documentation' => 'Просмотр документации', + 'app_title' => 'Бесплатное выставление счетов с открытым исходным кодом', + 'app_description' => 'Invoice Ninja - бесплатное решение с открытым исходным кодом для выставления счетов клиентам и получения платежей. С помощью Invoice Ninja вы можете легко создавать и отправлять красивые счета-фактуры с любого устройства, имеющего доступ к сети. Ваши клиенты смогут печатать ваши счета-фактуры, загружать их в виде pdf-файлов и даже оплачивать онлайн в системе.', + 'rows' => 'строк', 'www' => 'www', - 'logo' => 'Logo', - 'subdomain' => 'Subdomain', - 'provide_name_or_email' => 'Please provide a name or email', - 'charts_and_reports' => 'Charts & Reports', - 'chart' => 'Chart', - 'report' => 'Report', - 'group_by' => 'Group by', - 'paid' => 'Paid', - 'enable_report' => 'Report', - 'enable_chart' => 'Chart', - 'totals' => 'Totals', - 'run' => 'Run', - 'export' => 'Export', - 'documentation' => 'Documentation', + 'logo' => 'Логотип', + 'subdomain' => 'Поддомен', + 'provide_name_or_email' => 'Укажите имя и адрес эл. почты', + 'charts_and_reports' => 'Графики и отчеты', + 'chart' => 'График', + 'report' => 'Отчет', + 'group_by' => 'Группировать', + 'paid' => 'Оплачено', + 'enable_report' => 'Отчет', + 'enable_chart' => 'График', + 'totals' => 'Итого', + 'run' => 'Создать', + 'export' => 'Экспорт', + 'documentation' => 'Документация', 'zapier' => 'Zapier', - 'recurring' => 'Recurring', - 'last_invoice_sent' => 'Last invoice sent :date', - 'processed_updates' => 'Successfully completed update', - 'tasks' => 'Tasks', - 'new_task' => 'New Task', - 'start_time' => 'Start Time', - 'created_task' => 'Successfully created task', - 'updated_task' => 'Successfully updated task', - 'edit_task' => 'Edit Task', + 'recurring' => 'Повторяющийся', + 'last_invoice_sent' => 'Последний счет отправлен :date', + 'processed_updates' => 'Обновление прошло успешно', + 'tasks' => 'Задание', + 'new_task' => 'Новое задание', + 'start_time' => 'Время начала', + 'created_task' => 'Задание успешно создано', + 'updated_task' => 'Задание успешно обновлено', + 'edit_task' => 'Редактировать задание', 'clone_task' => 'Clone Task', - 'archive_task' => 'Archive Task', - 'restore_task' => 'Restore Task', - 'delete_task' => 'Delete Task', - 'stop_task' => 'Stop Task', - 'time' => 'Time', - 'start' => 'Start', - 'stop' => 'Stop', - 'now' => 'Now', - 'timer' => 'Timer', - 'manual' => 'Manual', - 'date_and_time' => 'Date & Time', - 'second' => 'Second', - 'seconds' => 'Seconds', - 'minute' => 'Minute', - 'minutes' => 'Minutes', - 'hour' => 'Hour', - 'hours' => 'Hours', - 'task_details' => 'Task Details', - 'duration' => 'Duration', + 'archive_task' => 'Архивировать задание', + 'restore_task' => 'Восстановить задание', + 'delete_task' => 'Удалить задание', + 'stop_task' => 'Остановить задание', + 'time' => 'Время', + 'start' => 'Старт', + 'stop' => 'Стоп', + 'now' => 'Сейчас', + 'timer' => 'Таймер', + 'manual' => 'Руководство', + 'date_and_time' => 'Дата и время', + 'second' => 'Секунда', + 'seconds' => 'Секунды', + 'minute' => 'Минута', + 'minutes' => 'Минуты', + 'hour' => 'Час', + 'hours' => 'Часы', + 'task_details' => 'Детали задания', + 'duration' => 'Длительность', 'time_log' => 'Time Log', - 'end_time' => 'End Time', - 'end' => 'End', - 'invoiced' => 'Invoiced', - 'logged' => 'Logged', - 'running' => 'Running', - 'task_error_multiple_clients' => 'The tasks can\'t belong to different clients', - 'task_error_running' => 'Please stop running tasks first', - 'task_error_invoiced' => 'Tasks have already been invoiced', - 'restored_task' => 'Successfully restored task', - 'archived_task' => 'Successfully archived task', - 'archived_tasks' => 'Successfully archived :count tasks', - 'deleted_task' => 'Successfully deleted task', - 'deleted_tasks' => 'Successfully deleted :count tasks', - 'create_task' => 'Create Task', - 'stopped_task' => 'Successfully stopped task', - 'invoice_task' => 'Invoice Task', + 'end_time' => 'Время завершения', + 'end' => 'Завершить', + 'invoiced' => 'Выставлен счёт', + 'logged' => 'Учтено', + 'running' => 'Выполняется', + 'task_error_multiple_clients' => 'Задания могут относиться к разным клиентам', + 'task_error_running' => 'Пожалуйста, остановить активные задания', + 'task_error_invoiced' => 'Задания включены в счёт', + 'restored_task' => 'Задание успешно восстановлено', + 'archived_task' => 'Задание перенесено в архив', + 'archived_tasks' => 'Перенесено в архив :count заданий', + 'deleted_task' => 'Задание удалено', + 'deleted_tasks' => 'Удалено :count заданий', + 'create_task' => 'Создать задание', + 'stopped_task' => 'Задание успешно остановлено', + 'invoice_task' => 'Включить в счет', 'invoice_labels' => 'Invoice Labels', - 'prefix' => 'Prefix', - 'counter' => 'Counter', + 'prefix' => 'Префикс', + 'counter' => 'Счётчик', 'payment_type_dwolla' => 'Dwolla', - 'gateway_help_43' => ':link to sign up for Dwolla', - 'partial_value' => 'Must be greater than zero and less than the total', - 'more_actions' => 'More Actions', + 'gateway_help_43' => ':link регистрация на Dwolla', + 'partial_value' => 'Должно быть больше нуля и меньше, чем всего', + 'more_actions' => 'Больше', 'pro_plan_title' => 'NINJA PRO', - 'pro_plan_call_to_action' => 'Upgrade Now!', - 'pro_plan_feature1' => 'Create Unlimited Clients', - 'pro_plan_feature2' => 'Access to 10 Beautiful Invoice Designs', - 'pro_plan_feature3' => 'Custom URLs - "YourBrand.InvoiceNinja.com"', - 'pro_plan_feature4' => 'Remove "Created by Invoice Ninja"', - 'pro_plan_feature5' => 'Multi-user Access & Activity Tracking', - 'pro_plan_feature6' => 'Create Quotes & Pro-forma Invoices', - 'pro_plan_feature7' => 'Customize Invoice Field Titles & Numbering', - 'pro_plan_feature8' => 'Option to Attach PDFs to Client Emails', - 'resume' => 'Resume', - 'break_duration' => 'Break', - 'edit_details' => 'Edit Details', - 'work' => 'Work', - 'timezone_unset' => 'Please :link to set your timezone', - 'click_here' => 'click here', - 'email_receipt' => 'Email payment receipt to the client', - 'created_payment_emailed_client' => 'Successfully created payment and emailed client', - 'add_company' => 'Add Company', - 'untitled' => 'Untitled', - 'new_company' => 'New Company', - 'associated_accounts' => 'Successfully linked accounts', - 'unlinked_account' => 'Successfully unlinked accounts', - 'login' => 'Login', - 'or' => 'or', - 'email_error' => 'There was a problem sending the email', - 'confirm_recurring_timing' => 'Note: emails are sent at the start of the hour.', + 'pro_plan_call_to_action' => 'Оформить подписку!', + 'pro_plan_feature1' => 'Создать несколько клиентов', + 'pro_plan_feature2' => 'Доступ к 10 дополнительным шаблоны счетов', + 'pro_plan_feature3' => 'Настраиваемый URL - "ВашБренд.InvoiceNinja.com"', + 'pro_plan_feature4' => 'Удалить "Created by Invoice Ninja"', + 'pro_plan_feature5' => 'Многопользовательский доступ и отслеживание активности', + 'pro_plan_feature6' => 'Создание котировок и профессиональных счетов-фактур', + 'pro_plan_feature7' => 'Настройка заголовков и нумерации полей счета', + 'pro_plan_feature8' => 'Возможность прикрепления PDF-файлов к электронным письмам', + 'resume' => 'Назад', + 'break_duration' => 'Прервать', + 'edit_details' => 'Изменить детали', + 'work' => 'Работа', + 'timezone_unset' => 'Нажмите :link, чтобы установить часовой пояс', + 'click_here' => 'нажмите сюда', + 'email_receipt' => 'Отправлять клиенту квитанцию об оплате по эл.почте ', + 'created_payment_emailed_client' => 'Квитанция сформирована и отправлена клиенту', + 'add_company' => 'Добавить компанию', + 'untitled' => 'Без названия', + 'new_company' => 'Новая компания', + 'associated_accounts' => 'Аккаунты успешно связаны', + 'unlinked_account' => 'Аккаунты отключены', + 'login' => 'Логин', + 'or' => 'или', + 'email_error' => 'Не удалось отправить сообщение по электронной почте', + 'confirm_recurring_timing' => 'Примечание: электронные письма отправляются в начале часа.', 'confirm_recurring_timing_not_sent' => 'Note: invoices are created at the start of the hour.', - 'payment_terms_help' => 'Sets the default invoice due date', - 'unlink_account' => 'Unlink Account', - 'unlink' => 'Unlink', - 'show_address' => 'Show Address', - 'show_address_help' => 'Require client to provide their billing address', - 'update_address' => 'Update Address', - 'update_address_help' => 'Update client\'s address with provided details', - 'times' => 'Times', - 'set_now' => 'Set to now', - 'dark_mode' => 'Dark Mode', - 'dark_mode_help' => 'Use a dark background for the sidebars', - 'add_to_invoice' => 'Add to invoice :invoice', - 'create_new_invoice' => 'Create new invoice', - 'task_errors' => 'Please correct any overlapping times', - 'from' => 'From', - 'to' => 'To', - 'font_size' => 'Font Size', - 'primary_color' => 'Primary Color', - 'secondary_color' => 'Secondary Color', - 'customize_design' => 'Customize Design', - 'content' => 'Content', - 'styles' => 'Styles', - 'defaults' => 'Defaults', - 'margins' => 'Margins', - 'header' => 'Header', - 'footer' => 'Footer', - 'custom' => 'Custom', - 'invoice_to' => 'Invoice to', - 'invoice_no' => 'Invoice No.', - 'quote_no' => 'Quote No.', - 'recent_payments' => 'Recent Payments', - 'outstanding' => 'Outstanding', - 'manage_companies' => 'Manage Companies', - 'total_revenue' => 'Total Revenue', - 'current_user' => 'Current User', - 'new_recurring_invoice' => 'New Recurring Invoice', - 'recurring_invoice' => 'Recurring Invoice', + 'payment_terms_help' => 'Устанавливает дату выставления счета по умолчанию', + 'unlink_account' => 'Отключить аккаунт', + 'unlink' => 'Отключить', + 'show_address' => 'Показать адрес', + 'show_address_help' => 'Требовать от клиента предоставления своего платежного адреса', + 'update_address' => 'Обновить адрес', + 'update_address_help' => 'Обновить адрес клиента предоставленными сведениями', + 'times' => 'Время', + 'set_now' => 'Установить сейчас', + 'dark_mode' => 'Темная тема', + 'dark_mode_help' => 'Используйте темный фон для боковых панелей', + 'add_to_invoice' => 'Добавить в счет :invoice', + 'create_new_invoice' => 'Создать новый счёт', + 'task_errors' => 'Пожалуйста, исправьте перекрывающиеся интервалы', + 'from' => 'От', + 'to' => 'Кому', + 'font_size' => 'Размер шрифта', + 'primary_color' => 'Основной цвет', + 'secondary_color' => 'Второстепенный цвет', + 'customize_design' => 'Настроить шаблон', + 'content' => 'Содержание', + 'styles' => 'Стили', + 'defaults' => 'По умолчанию', + 'margins' => 'Границы', + 'header' => 'Заголовок', + 'footer' => 'Нижний колонтитул', + 'custom' => 'Настроить', + 'invoice_to' => 'Счет для', + 'invoice_no' => 'Номер счета', + 'quote_no' => 'Номер котировки', + 'recent_payments' => 'Последние платежи', + 'outstanding' => 'Исходящие', + 'manage_companies' => 'Управлять компаниями', + 'total_revenue' => 'Совокупный доход', + 'current_user' => 'Текущий пользователь', + 'new_recurring_invoice' => 'Создать повторяющийся счет', + 'recurring_invoice' => 'Повторяющийся счет', 'new_recurring_quote' => 'New Recurring Quote', 'recurring_quote' => 'Recurring Quote', - 'recurring_too_soon' => 'It\'s too soon to create the next recurring invoice, it\'s scheduled for :date', - 'created_by_invoice' => 'Created by :invoice', - 'primary_user' => 'Primary User', - 'help' => 'Help', + 'recurring_too_soon' => 'Слишком рано создавать следующий повторяющийся счет, который запланирован на :date', + 'created_by_invoice' => 'Создан на основе :invoice', + 'primary_user' => 'Основной пользователь', + 'help' => 'Помощь', 'customize_help' => '

We use :pdfmake_link to define the invoice designs declaratively. The pdfmake :playground_link provides a great way to see the library in action.

If you need help figuring something out post a question to our :forum_link with the design you\'re using.

', 'playground' => 'playground', - 'support_forum' => 'support forum', - 'invoice_due_date' => 'Due Date', - 'quote_due_date' => 'Valid Until', - 'valid_until' => 'Valid Until', - 'reset_terms' => 'Reset terms', - 'reset_footer' => 'Reset footer', - 'invoice_sent' => ':count invoice sent', - 'invoices_sent' => ':count invoices sent', - 'status_draft' => 'Draft', - 'status_sent' => 'Sent', - 'status_viewed' => 'Viewed', - 'status_partial' => 'Partial', - 'status_paid' => 'Paid', - 'status_unpaid' => 'Unpaid', - 'status_all' => 'All', + 'support_forum' => 'Форум поддержки', + 'invoice_due_date' => 'Срок оплаты', + 'quote_due_date' => 'Действителен до', + 'valid_until' => 'Действителен до', + 'reset_terms' => 'Условия по умолчанию', + 'reset_footer' => 'Колонтитул по умолчанию', + 'invoice_sent' => ':count счет отправлен', + 'invoices_sent' => ':count счетов отправлено', + 'status_draft' => 'Черновик', + 'status_sent' => 'Отправлено', + 'status_viewed' => 'Просмотрено', + 'status_partial' => 'Частично', + 'status_paid' => 'Оплачено', + 'status_unpaid' => 'Неоплачено', + 'status_all' => 'Все', 'show_line_item_tax' => 'Display line item taxes inline', - 'iframe_url' => 'Website', - 'iframe_url_help1' => 'Copy the following code to a page on your site.', - 'iframe_url_help2' => 'You can test the feature by clicking \'View as recipient\' for an invoice.', - 'auto_bill' => 'Auto Bill', - 'military_time' => '24 Hour Time', - 'last_sent' => 'Last Sent', - 'reminder_emails' => 'Reminder Emails', + 'iframe_url' => 'Веб-сайт', + 'iframe_url_help1' => 'Скопируйте следующий код на страницу своего сайта.', + 'iframe_url_help2' => 'Вы можете протестировать эту функцию счета, нажав «Просмотр как получатель».', + 'auto_bill' => 'Авто-счет', + 'military_time' => '24-часовой формат', + 'last_sent' => 'Последний отправленный', + 'reminder_emails' => 'Письма-напоминания', 'quote_reminder_emails' => 'Quote Reminder Emails', - 'templates_and_reminders' => 'Templates & Reminders', - 'subject' => 'Subject', - 'body' => 'Body', - 'first_reminder' => 'First Reminder', - 'second_reminder' => 'Second Reminder', - 'third_reminder' => 'Third Reminder', - 'num_days_reminder' => 'Days after due date', - 'reminder_subject' => 'Reminder: Invoice :invoice from :account', - 'reset' => 'Reset', - 'invoice_not_found' => 'The requested invoice is not available', - 'referral_program' => 'Referral Program', - 'referral_code' => 'Referral URL', - 'last_sent_on' => 'Sent Last: :date', - 'page_expire' => 'This page will expire soon, :click_here to keep working', - 'upcoming_quotes' => 'Upcoming Quotes', + 'templates_and_reminders' => 'Шаблоны и Напоминания', + 'subject' => 'Тема', + 'body' => 'Содержание', + 'first_reminder' => 'Первое напоминание', + 'second_reminder' => 'Второе напоминание', + 'third_reminder' => 'Третье напоминание', + 'num_days_reminder' => 'Дней просрочено', + 'reminder_subject' => 'Напоминание: Счет :invoice от :account', + 'reset' => 'Сбросить', + 'invoice_not_found' => 'Запрошенный счет недоступен', + 'referral_program' => 'Реферальная программа', + 'referral_code' => 'Реферальная ссылка', + 'last_sent_on' => 'Отправлено последним :date', + 'page_expire' => 'Эта страница скоро будет сброшена, чтобы продолжить работу нажмите :click_here.', + 'upcoming_quotes' => 'Входящие Прайс-листы', 'expired_quotes' => 'Expired Quotes', - 'sign_up_using' => 'Sign up using', - 'invalid_credentials' => 'These credentials do not match our records', - 'show_all_options' => 'Show all options', - 'user_details' => 'User Details', - 'oneclick_login' => 'Connected Account', - 'disable' => 'Disable', - 'invoice_quote_number' => 'Invoice and Quote Numbers', + 'sign_up_using' => 'Войти, используя', + 'invalid_credentials' => 'Учетные данные не найдены', + 'show_all_options' => 'Показать все варианты', + 'user_details' => 'Данные пользователя', + 'oneclick_login' => 'Связанный Аккаунт', + 'disable' => 'Отключить', + 'invoice_quote_number' => 'Номера счетов и котировок', 'invoice_charges' => 'Invoice Surcharges', - 'notification_invoice_bounced' => 'We were unable to deliver Invoice :invoice to :contact.', - 'notification_invoice_bounced_subject' => 'Unable to deliver Invoice :invoice', - 'notification_quote_bounced' => 'We were unable to deliver Quote :invoice to :contact.', + 'notification_invoice_bounced' => 'Не удалось доставить счет :invoice :contact.', + 'notification_invoice_bounced_subject' => 'Не удалось доставить счет :invoice', + 'notification_quote_bounced' => 'Не удалось доставить котировку :invoice :contact.', 'notification_quote_bounced_subject' => 'Unable to deliver Quote :invoice', - 'custom_invoice_link' => 'Custom Invoice Link', - 'total_invoiced' => 'Total Invoiced', - 'open_balance' => 'Open Balance', - 'verify_email' => 'Please visit the link in the account confirmation email to verify your email address.', - 'basic_settings' => 'Basic Settings', + 'custom_invoice_link' => 'Настроить ссылку на счет', + 'total_invoiced' => 'Всего выставлено', + 'open_balance' => 'Открытый баланс', + 'verify_email' => 'Для подтверждения адреса электронной почты, перейдите по ссылке в письме.', + 'basic_settings' => 'Основные настройки', 'pro' => 'Pro', - 'gateways' => 'Payment Gateways', - 'next_send_on' => 'Send Next: :date', + 'gateways' => 'Платежные шлюзы', + 'next_send_on' => 'Следующая отправка :date', 'no_longer_running' => 'This invoice is not scheduled to run', - 'general_settings' => 'General Settings', - 'customize' => 'Customize', - 'oneclick_login_help' => 'Connect an account to login without a password', - 'referral_code_help' => 'Earn money by sharing our app online', + 'general_settings' => 'Общие настройки', + 'customize' => 'Настроить', + 'oneclick_login_help' => 'Подключить учетную запись для входа без пароля', + 'referral_code_help' => 'Зарабатывайте деньги, делясь нашим приложением онлайн', 'enable_with_stripe' => 'Enable | Requires Stripe', - 'tax_settings' => 'Tax Settings', - 'create_tax_rate' => 'Add Tax Rate', - 'updated_tax_rate' => 'Successfully updated tax rate', - 'created_tax_rate' => 'Successfully created tax rate', - 'edit_tax_rate' => 'Edit tax rate', - 'archive_tax_rate' => 'Archive Tax Rate', - 'archived_tax_rate' => 'Successfully archived the tax rate', - 'default_tax_rate_id' => 'Default Tax Rate', - 'tax_rate' => 'Tax Rate', + 'tax_settings' => 'Настройки налогов', + 'create_tax_rate' => 'Добавить налоговую ставку', + 'updated_tax_rate' => 'Налоговая ставка обновлена', + 'created_tax_rate' => 'Налоговая ставка создана', + 'edit_tax_rate' => 'Изменить налоговую ставку', + 'archive_tax_rate' => 'Добавить налоговую ставку в архив', + 'archived_tax_rate' => 'Налоговая ставка добавлена в архив', + 'default_tax_rate_id' => 'Налог по умолчанию', + 'tax_rate' => 'Налоговая ставка', 'recurring_hour' => 'Recurring Hour', - 'pattern' => 'Pattern', + 'pattern' => 'Шаблон', 'pattern_help_title' => 'Pattern Help', 'pattern_help_1' => 'Create custom numbers by specifying a pattern', 'pattern_help_2' => 'Available variables:', @@ -749,12 +749,12 @@ $LANG = array( 'see_options' => 'See options', 'invoice_counter' => 'Invoice Counter', 'quote_counter' => 'Quote Counter', - 'type' => 'Type', - 'activity_1' => ':user created client :client', + 'type' => 'Тип', + 'activity_1' => ':user Создал Клиента :client', 'activity_2' => ':user archived client :client', 'activity_3' => ':user deleted client :client', - 'activity_4' => ':user created invoice :invoice', - 'activity_5' => ':user updated invoice :invoice', + 'activity_4' => ':user Создал Счёт :invoice', + 'activity_5' => ':user Обновил счёт :invoice', 'activity_6' => ':user emailed invoice :invoice for :client to :contact', 'activity_7' => ':contact viewed invoice :invoice for :client', 'activity_8' => ':user archived invoice :invoice', @@ -785,14 +785,14 @@ $LANG = array( 'activity_33' => ':user restored vendor :vendor', 'activity_34' => ':user created expense :expense', 'activity_35' => ':user archived expense :expense', - 'activity_36' => ':user deleted expense :expense', + 'activity_36' => ':user Удалил Затраты :expense', 'activity_37' => ':user restored expense :expense', 'activity_42' => ':user created task :task', 'activity_43' => ':user updated task :task', 'activity_44' => ':user archived task :task', 'activity_45' => ':user deleted task :task', 'activity_46' => ':user restored task :task', - 'activity_47' => ':user updated expense :expense', + 'activity_47' => ':user Обновил Затраты :expense', 'activity_48' => ':user updated ticket :ticket', 'activity_49' => ':user closed ticket :ticket', 'activity_50' => ':user merged ticket :ticket', @@ -803,22 +803,22 @@ $LANG = array( 'activity_55' => ':contact replied ticket :ticket', 'activity_56' => ':user viewed ticket :ticket', - 'payment' => 'Payment', - 'system' => 'System', + 'payment' => 'Платёж', + 'system' => 'Сичтема', 'signature' => 'Email Signature', - 'default_messages' => 'Default Messages', + 'default_messages' => 'Стандартные сообщения', 'quote_terms' => 'Quote Terms', 'default_quote_terms' => 'Default Quote Terms', 'default_invoice_terms' => 'Default Invoice Terms', 'default_invoice_footer' => 'Default Invoice Footer', 'quote_footer' => 'Quote Footer', - 'free' => 'Free', + 'free' => 'Бесплатно', 'quote_is_approved' => 'Successfully approved', 'apply_credit' => 'Apply Credit', - 'system_settings' => 'System Settings', + 'system_settings' => 'Системные настройки', 'archive_token' => 'Archive Token', 'archived_token' => 'Successfully archived token', - 'archive_user' => 'Archive User', + 'archive_user' => 'Добавить пользователя в архив', 'archived_user' => 'Successfully archived user', 'archive_account_gateway' => 'Delete Gateway', 'archived_account_gateway' => 'Successfully archived gateway', @@ -834,31 +834,31 @@ $LANG = array( 'deleted_recurring_quote' => 'Successfully deleted recurring quote', 'restore_recurring_quote' => 'Restore Recurring Quote', 'restored_recurring_quote' => 'Successfully restored recurring quote', - 'archived' => 'Archived', - 'untitled_account' => 'Untitled Company', - 'before' => 'Before', - 'after' => 'After', + 'archived' => 'Архив', + 'untitled_account' => 'Компания без названия', + 'before' => 'До', + 'after' => 'После', 'reset_terms_help' => 'Reset to the default account terms', 'reset_footer_help' => 'Reset to the default account footer', - 'export_data' => 'Export Data', - 'user' => 'User', - 'country' => 'Country', - 'include' => 'Include', - 'logo_too_large' => 'Your logo is :size, for better PDF performance we suggest uploading an image file less than 200KB', - 'import_freshbooks' => 'Import From FreshBooks', - 'import_data' => 'Import Data', - 'source' => 'Source', + 'export_data' => 'Экспорт данных', + 'user' => 'Пользователь', + 'country' => 'Страна', + 'include' => 'Включить', + 'logo_too_large' => 'Ваш логотип: размер, для лучшего отображения в PDF мы рекомендуем загрузить файл размером менее 200 КБ', + 'import_freshbooks' => 'Импорт из FreshBooks', + 'import_data' => 'Импорт данных', + 'source' => 'Источник', 'csv' => 'CSV', - 'client_file' => 'Client File', - 'invoice_file' => 'Invoice File', - 'task_file' => 'Task File', + 'client_file' => 'Файл клиентов', + 'invoice_file' => 'Файл счетов', + 'task_file' => 'Файл заданий', 'no_mapper' => 'No valid mapping for file', 'invalid_csv_header' => 'Invalid CSV Header', 'client_portal' => 'Client Portal', 'admin' => 'Admin', 'disabled' => 'Disabled', 'show_archived_users' => 'Show archived users', - 'notes' => 'Notes', + 'notes' => 'Заметки', 'invoice_will_create' => 'invoice will be created', 'invoices_will_create' => 'invoices will be created', 'failed_to_import' => 'The following records failed to import, they either already exist or are missing required fields.', @@ -895,53 +895,53 @@ $LANG = array( 'next_quote_number' => 'The next quote number is :number.', 'days_before' => 'days before the', 'days_after' => 'days after the', - 'field_due_date' => 'due date', + 'field_due_date' => 'cрок оплаты', 'field_invoice_date' => 'invoice date', 'schedule' => 'Schedule', 'email_designs' => 'Email Designs', 'assigned_when_sent' => 'Assigned when sent', 'white_label_purchase_link' => 'Purchase a white label license', - 'expense' => 'Expense', - 'expenses' => 'Expenses', - 'new_expense' => 'Enter Expense', - 'enter_expense' => 'Enter Expense', - 'vendors' => 'Vendors', - 'new_vendor' => 'New Vendor', + 'expense' => 'Затрата', + 'expenses' => 'Затраты', + 'new_expense' => 'Добавить затраты', + 'enter_expense' => 'Добавить затраты', + 'vendors' => 'Поставщики', + 'new_vendor' => 'Новый поставщик', 'payment_terms_net' => 'Net', 'vendor' => 'Vendor', - 'edit_vendor' => 'Edit Vendor', + 'edit_vendor' => 'Редактировать Поставщика', 'archive_vendor' => 'Archive Vendor', 'delete_vendor' => 'Delete Vendor', 'view_vendor' => 'View Vendor', - 'deleted_expense' => 'Successfully deleted expense', + 'deleted_expense' => 'Затраты успешно удалены', 'archived_expense' => 'Successfully archived expense', - 'deleted_expenses' => 'Successfully deleted expenses', + 'deleted_expenses' => 'Затраты успешно удалены', 'archived_expenses' => 'Successfully archived expenses', 'expense_amount' => 'Expense Amount', 'expense_balance' => 'Expense Balance', - 'expense_date' => 'Expense Date', + 'expense_date' => 'Дата Затрат', 'expense_should_be_invoiced' => 'Should this expense be invoiced?', - 'public_notes' => 'Public Notes', + 'public_notes' => 'Публичные заметки', 'invoice_amount' => 'Invoice Amount', 'exchange_rate' => 'Exchange Rate', 'yes' => 'Yes', 'no' => 'No', 'should_be_invoiced' => 'Should be invoiced', 'view_expense' => 'View expense # :expense', - 'edit_expense' => 'Edit Expense', + 'edit_expense' => 'Редактировать затраты', 'archive_expense' => 'Archive Expense', - 'delete_expense' => 'Delete Expense', + 'delete_expense' => 'Удалить затраты', 'view_expense_num' => 'Expense # :expense', - 'updated_expense' => 'Successfully updated expense', + 'updated_expense' => 'Затраты успешно обновлены', 'created_expense' => 'Successfully created expense', - 'enter_expense' => 'Enter Expense', + 'enter_expense' => 'Добавить затраты', 'view' => 'View', 'restore_expense' => 'Restore Expense', 'invoice_expense' => 'Invoice Expense', - 'expense_error_multiple_clients' => 'The expenses can\'t belong to different clients', + 'expense_error_multiple_clients' => 'Затраты не могут принадлежать разным клиентам', 'expense_error_invoiced' => 'Expense has already been invoiced', 'convert_currency' => 'Convert currency', - 'num_days' => 'Number of Days', + 'num_days' => 'Количество дней', 'create_payment_term' => 'Create Payment Term', 'edit_payment_terms' => 'Edit Payment Term', 'edit_payment_term' => 'Edit Payment Term', @@ -963,16 +963,16 @@ $LANG = array( 'due' => 'Due', 'next_due_on' => 'Due Next: :date', 'use_client_terms' => 'Use client terms', - 'day_of_month' => ':ordinal day of month', - 'last_day_of_month' => 'Last day of month', + 'day_of_month' => ':ordinal день месяца', + 'last_day_of_month' => 'Последний день месяца', 'day_of_week_after' => ':ordinal :day after', - 'sunday' => 'Sunday', - 'monday' => 'Monday', - 'tuesday' => 'Tuesday', - 'wednesday' => 'Wednesday', - 'thursday' => 'Thursday', - 'friday' => 'Friday', - 'saturday' => 'Saturday', + 'sunday' => 'Воскресенье', + 'monday' => 'Понедельник', + 'tuesday' => 'Вторник', + 'wednesday' => 'Среда', + 'thursday' => 'Четверг', + 'friday' => 'Пятница', + 'saturday' => 'Суббота', 'header_font_id' => 'Header Font', 'body_font_id' => 'Body Font', 'color_font_help' => 'Note: the primary color and fonts are also used in the client portal and custom email designs.', @@ -985,7 +985,7 @@ $LANG = array( 'bank_accounts' => 'Credit Cards & Banks', 'add_bank_account' => 'Add Bank Account', 'setup_account' => 'Setup Account', - 'import_expenses' => 'Import Expenses', + 'import_expenses' => 'Импортировать Затраты', 'bank_id' => 'Bank', 'integration_type' => 'Integration Type', 'updated_bank_account' => 'Successfully updated bank account', @@ -1006,7 +1006,8 @@ $LANG = array( 'auto_convert_quote_help' => 'Automatically convert a quote to an invoice when approved by a client.', 'validate' => 'Validate', 'info' => 'Info', - 'imported_expenses' => 'Successfully created :count_vendors vendor(s) and :count_expenses expense(s)', + 'imported_expenses' => ' +Успешно созданы :count_vendors Поставщик(и) и :count_expenses и расход(ы)', 'iframe_url_help3' => 'Note: if you plan on accepting credit cards details we strongly recommend enabling HTTPS on your site.', 'expense_error_multiple_currencies' => 'The expenses can\'t have different currencies.', 'expense_error_mismatch_currencies' => 'The client\'s currency does not match the expense currency.', @@ -1057,9 +1058,9 @@ $LANG = array( 'navigation' => 'Navigation', 'list_invoices' => 'List Invoices', 'list_clients' => 'List Clients', - 'list_quotes' => 'List Quotes', + 'list_quotes' => 'Список Прайс-листов', 'list_tasks' => 'List Tasks', - 'list_expenses' => 'List Expenses', + 'list_expenses' => 'Список затрат', 'list_recurring_invoices' => 'List Recurring Invoices', 'list_payments' => 'List Payments', 'list_credits' => 'List Credits', @@ -1068,7 +1069,7 @@ $LANG = array( 'search_hotkey' => 'shortcut is /', 'new_user' => 'New User', - 'new_product' => 'New Product', + 'new_product' => 'Новый товар/услуга', 'new_tax_rate' => 'New Tax Rate', 'invoiced_amount' => 'Invoiced Amount', 'invoice_item_fields' => 'Invoice Item Fields', @@ -1122,20 +1123,20 @@ $LANG = array( 'december' => 'December', // Documents - 'documents_header' => 'Documents:', - 'email_documents_header' => 'Documents:', + 'documents_header' => 'Документы:', + 'email_documents_header' => 'Документы:', 'email_documents_example_1' => 'Widgets Receipt.pdf', 'email_documents_example_2' => 'Final Deliverable.zip', - 'quote_documents' => 'Quote Documents', + 'quote_documents' => 'Прайс листы Документы', 'invoice_documents' => 'Invoice Documents', 'expense_documents' => 'Expense Documents', 'invoice_embed_documents' => 'Embed Documents', 'invoice_embed_documents_help' => 'Include attached images in the invoice.', - 'document_email_attachment' => 'Attach Documents', + 'document_email_attachment' => 'Загрузить Документы', 'ubl_email_attachment' => 'Attach UBL', 'download_documents' => 'Download Documents (:size)', 'documents_from_expenses' => 'From Expenses:', - 'dropzone_default_message' => 'Drop files or click to upload', + 'dropzone_default_message' => 'Для загрузки Перетащите файлы или нажмите.', 'dropzone_default_message_disabled' => 'Uploads disabled', 'dropzone_fallback_message' => '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.', @@ -1145,7 +1146,7 @@ $LANG = array( 'dropzone_cancel_upload' => 'Cancel upload', 'dropzone_cancel_upload_confirmation' => 'Are you sure you want to cancel this upload?', 'dropzone_remove_file' => 'Remove file', - 'documents' => 'Documents', + 'documents' => 'Документы', 'document_date' => 'Document Date', 'document_size' => 'Size', @@ -1177,11 +1178,11 @@ $LANG = array( 'plan_free_self_hosted' => 'Self Hosted (Free)', 'plan_trial' => 'Trial', 'plan_term' => 'Term', - 'plan_term_monthly' => 'Monthly', + 'plan_term_monthly' => 'Ежемесячно', 'plan_term_yearly' => 'Yearly', - 'plan_term_month' => 'Month', + 'plan_term_month' => 'Месяц', 'plan_term_year' => 'Year', - 'plan_price_monthly' => '$:price/Month', + 'plan_price_monthly' => '$:price/Месяц', 'plan_price_yearly' => '$:price/Year', 'updated_plan' => 'Updated plan settings', 'plan_paid' => 'Term Started', @@ -1205,7 +1206,7 @@ $LANG = array( 'live_preview_disabled' => 'Live preview has been disabled to support selected font', 'invoice_number_padding' => 'Padding', 'preview' => 'Preview', - 'list_vendors' => 'List Vendors', + 'list_vendors' => 'Список поставщиков', '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, :link to see the full list of features.', 'return_to_app' => 'Return To App', @@ -1268,13 +1269,13 @@ $LANG = array( 'company_account' => 'Company Account', 'account_holder_name' => 'Account Holder Name', 'add_account' => 'Add Account', - 'payment_methods' => 'Payment Methods', + 'payment_methods' => 'Методы оплаты', 'complete_verification' => 'Complete Verification', 'verification_amount1' => 'Amount 1', 'verification_amount2' => 'Amount 2', 'payment_method_verified' => 'Verification completed successfully', 'verification_failed' => 'Verification Failed', - 'remove_payment_method' => 'Remove Payment Method', + 'remove_payment_method' => 'Удалить метод оплаты', 'confirm_remove_payment_method' => 'Are you sure you want to remove this payment method?', 'remove' => 'Remove', 'payment_method_removed' => 'Removed payment method.', @@ -1352,7 +1353,7 @@ $LANG = array( 'debit_cards' => 'Debit Cards', 'warn_start_date_changed' => 'The next invoice will be sent on the new start date.', - 'warn_start_date_changed_not_sent' => 'The next invoice will be created on the new start date.', + 'warn_start_date_changed_not_sent' => 'Следущий счёт будет создан в начале следущего плтёжного периода', 'original_start_date' => 'Original start date', 'new_start_date' => 'New start date', 'security' => 'Security', @@ -1362,12 +1363,12 @@ $LANG = array( 'enable_second_tax_rate' => 'Enable specifying a second tax rate', 'payment_file' => 'Payment File', 'expense_file' => 'Expense File', - 'product_file' => 'Product File', - 'import_products' => 'Import Products', - 'products_will_create' => 'products will be created', - 'product_key' => 'Product', - 'created_products' => 'Successfully created/updated :count product(s)', - 'export_help' => 'Use JSON if you plan to import the data into Invoice Ninja.
The file includes clients, products, invoices, quotes and payments.', + 'product_file' => 'Файл товара/услуги', + 'import_products' => 'Импортировать товары/услуги', + 'products_will_create' => 'Товары/услуги будут созданы', + 'product_key' => 'Товар/услуга', + 'created_products' => 'Успешно создан(ы)/обновлен(ы) :count товар(ы)/улуга(и)', + 'export_help' => 'Используйте JSON если вы планируете импортировать данные в Invoice Ninja.
Файл вклчает клиентов, товары/услуги, счета, прайс-листы и платежи.', 'selfhost_export_help' => '
We recommend using mysqldump to create a full backup.', 'JSON_file' => 'JSON File', @@ -1413,14 +1414,14 @@ $LANG = array( // Frequencies 'freq_inactive' => 'Inactive', 'freq_daily' => 'Daily', - 'freq_weekly' => 'Weekly', + 'freq_weekly' => 'Еженедельно', 'freq_biweekly' => 'Biweekly', - 'freq_two_weeks' => 'Two weeks', - 'freq_four_weeks' => 'Four weeks', - 'freq_monthly' => 'Monthly', - 'freq_three_months' => 'Three months', - 'freq_four_months' => 'Four months', - 'freq_six_months' => 'Six months', + 'freq_two_weeks' => 'Две недели', + 'freq_four_weeks' => 'Четыре недели', + 'freq_monthly' => 'Ежемесячно', + 'freq_three_months' => 'Три месяца', + 'freq_four_months' => 'Четыре месяца', + 'freq_six_months' => 'Полгода', 'freq_annually' => 'Annually', 'freq_two_years' => 'Two years', @@ -1637,139 +1638,139 @@ $LANG = array( 'country_Montenegro' => 'Montenegro', 'country_Montserrat' => 'Montserrat', 'country_Morocco' => 'Morocco', - 'country_Mozambique' => 'Mozambique', - 'country_Oman' => 'Oman', - 'country_Namibia' => 'Namibia', - 'country_Nauru' => 'Nauru', - 'country_Nepal' => 'Nepal', - 'country_Netherlands' => 'Netherlands', - 'country_Curaçao' => 'Curaçao', - 'country_Aruba' => 'Aruba', - 'country_Sint Maarten (Dutch part)' => 'Sint Maarten (Dutch part)', - 'country_Bonaire, Sint Eustatius and Saba' => 'Bonaire, Sint Eustatius and Saba', - 'country_New Caledonia' => 'New Caledonia', - 'country_Vanuatu' => 'Vanuatu', - 'country_New Zealand' => 'New Zealand', - 'country_Nicaragua' => 'Nicaragua', - 'country_Niger' => 'Niger', - 'country_Nigeria' => 'Nigeria', - 'country_Niue' => 'Niue', - 'country_Norfolk Island' => 'Norfolk Island', - 'country_Norway' => 'Norway', + 'country_Mozambique' => 'Мозамбик', + 'country_Oman' => 'Оман', + 'country_Namibia' => 'Намибия', + 'country_Nauru' => 'Науру', + 'country_Nepal' => 'Непал', + 'country_Netherlands' => 'Нидерланды', + 'country_Curaçao' => 'Курасао', + 'country_Aruba' => 'Аруба', + 'country_Sint Maarten (Dutch part)' => 'Сан-Мартен (Голландская часть)', + 'country_Bonaire, Sint Eustatius and Saba' => 'о-ва Бонайре, Синт-Эстатиус и Саба', + 'country_New Caledonia' => 'Новая Каледония', + 'country_Vanuatu' => 'Вануату', + 'country_New Zealand' => 'Новая Зеландия', + 'country_Nicaragua' => 'Никарагуа', + 'country_Niger' => 'Нигер', + 'country_Nigeria' => 'Нигерия', + 'country_Niue' => 'Ниуэ', + 'country_Norfolk Island' => 'Норфолкские острова', + 'country_Norway' => 'Норвегия', 'country_Northern Mariana Islands' => 'Northern Mariana Islands', 'country_United States Minor Outlying Islands' => 'United States Minor Outlying Islands', 'country_Micronesia, Federated States of' => 'Micronesia, Federated States of', 'country_Marshall Islands' => 'Marshall Islands', 'country_Palau' => 'Palau', - 'country_Pakistan' => 'Pakistan', - 'country_Panama' => 'Panama', - 'country_Papua New Guinea' => 'Papua New Guinea', - 'country_Paraguay' => 'Paraguay', - 'country_Peru' => 'Peru', - 'country_Philippines' => 'Philippines', - 'country_Pitcairn' => 'Pitcairn', - 'country_Poland' => 'Poland', - 'country_Portugal' => 'Portugal', - 'country_Guinea-Bissau' => 'Guinea-Bissau', - 'country_Timor-Leste' => 'Timor-Leste', - 'country_Puerto Rico' => 'Puerto Rico', - 'country_Qatar' => 'Qatar', - 'country_Réunion' => 'Réunion', - 'country_Romania' => 'Romania', - 'country_Russian Federation' => 'Russian Federation', - 'country_Rwanda' => 'Rwanda', - 'country_Saint Barthélemy' => 'Saint Barthélemy', + 'country_Pakistan' => 'Пакистан', + 'country_Panama' => 'Панама', + 'country_Papua New Guinea' => 'Папуа Новая Гвинея', + 'country_Paraguay' => 'Парагвай', + 'country_Peru' => 'Перу', + 'country_Philippines' => 'Филиппины', + 'country_Pitcairn' => 'о-в Питкэрн', + 'country_Poland' => 'Польша', + 'country_Portugal' => 'Португалия', + 'country_Guinea-Bissau' => 'Гвинея-Биссау', + 'country_Timor-Leste' => 'Тимор', + 'country_Puerto Rico' => 'Пуэрто-Рико', + 'country_Qatar' => 'Катар', + 'country_Réunion' => 'Реюньон', + 'country_Romania' => 'Румыния', + 'country_Russian Federation' => 'Российская федерация', + 'country_Rwanda' => 'Руанда', + 'country_Saint Barthélemy' => 'Сен-Бартелеми', 'country_Saint Helena, Ascension and Tristan da Cunha' => 'Saint Helena, Ascension and Tristan da Cunha', - 'country_Saint Kitts and Nevis' => 'Saint Kitts and Nevis', + 'country_Saint Kitts and Nevis' => 'Сент-Китс и Невис', 'country_Anguilla' => 'Anguilla', - 'country_Saint Lucia' => 'Saint Lucia', - 'country_Saint Martin (French part)' => 'Saint Martin (French part)', - 'country_Saint Pierre and Miquelon' => 'Saint Pierre and Miquelon', - 'country_Saint Vincent and the Grenadines' => 'Saint Vincent and the Grenadines', - 'country_San Marino' => 'San Marino', - 'country_Sao Tome and Principe' => 'Sao Tome and Principe', - 'country_Saudi Arabia' => 'Saudi Arabia', - 'country_Senegal' => 'Senegal', - 'country_Serbia' => 'Serbia', - 'country_Seychelles' => 'Seychelles', - 'country_Sierra Leone' => 'Sierra Leone', - 'country_Singapore' => 'Singapore', - 'country_Slovakia' => 'Slovakia', - 'country_Viet Nam' => 'Viet Nam', - 'country_Slovenia' => 'Slovenia', - 'country_Somalia' => 'Somalia', - 'country_South Africa' => 'South Africa', - 'country_Zimbabwe' => 'Zimbabwe', - 'country_Spain' => 'Spain', - 'country_South Sudan' => 'South Sudan', - 'country_Sudan' => 'Sudan', - 'country_Western Sahara' => 'Western Sahara', - 'country_Suriname' => 'Suriname', + 'country_Saint Lucia' => 'Сент-Люсия', + 'country_Saint Martin (French part)' => 'Сан-Мартен (Французская часть)', + 'country_Saint Pierre and Miquelon' => 'Сен-Пьер и Микелон', + 'country_Saint Vincent and the Grenadines' => 'Сент-Винсент и Гренадины', + 'country_San Marino' => 'Сан-Марино', + 'country_Sao Tome and Principe' => 'Сан-Томе и Принсипи', + 'country_Saudi Arabia' => 'Саудовская Аравия', + 'country_Senegal' => 'Сенегал', + 'country_Serbia' => 'Сербия', + 'country_Seychelles' => 'Сейшеллы', + 'country_Sierra Leone' => 'Сьерра-Леоне', + 'country_Singapore' => 'Сингапур', + 'country_Slovakia' => 'Словакия', + 'country_Viet Nam' => 'Вьетнам', + 'country_Slovenia' => 'Словения', + 'country_Somalia' => 'Сомали', + 'country_South Africa' => 'ЮАР', + 'country_Zimbabwe' => 'Зимбабве', + 'country_Spain' => 'Испания', + 'country_South Sudan' => 'Южный Судан', + 'country_Sudan' => 'Судан', + 'country_Western Sahara' => 'Западная Сахара', + 'country_Suriname' => 'Суринам', 'country_Svalbard and Jan Mayen' => 'Svalbard and Jan Mayen', - 'country_Swaziland' => 'Swaziland', - 'country_Sweden' => 'Sweden', - 'country_Switzerland' => 'Switzerland', - 'country_Syrian Arab Republic' => 'Syrian Arab Republic', - 'country_Tajikistan' => 'Tajikistan', - 'country_Thailand' => 'Thailand', - 'country_Togo' => 'Togo', - 'country_Tokelau' => 'Tokelau', - 'country_Tonga' => 'Tonga', - 'country_Trinidad and Tobago' => 'Trinidad and Tobago', - 'country_United Arab Emirates' => 'United Arab Emirates', - 'country_Tunisia' => 'Tunisia', - 'country_Turkey' => 'Turkey', - 'country_Turkmenistan' => 'Turkmenistan', + 'country_Swaziland' => 'Свазиленд', + 'country_Sweden' => 'Швеция', + 'country_Switzerland' => 'Швейцария', + 'country_Syrian Arab Republic' => 'Сирийская Арабская Республика', + 'country_Tajikistan' => 'Таджикистан', + 'country_Thailand' => 'Таиланд', + 'country_Togo' => 'Того', + 'country_Tokelau' => 'Токелау', + 'country_Tonga' => 'Тонга', + 'country_Trinidad and Tobago' => 'Тринидад и Тогабо', + 'country_United Arab Emirates' => 'Объединённые Арабские Эмираты', + 'country_Tunisia' => 'Тунис', + 'country_Turkey' => 'Турция', + 'country_Turkmenistan' => 'Туркменистан', 'country_Turks and Caicos Islands' => 'Turks and Caicos Islands', 'country_Tuvalu' => 'Tuvalu', - 'country_Uganda' => 'Uganda', - 'country_Ukraine' => 'Ukraine', + 'country_Uganda' => 'Уганда', + 'country_Ukraine' => 'Украина', 'country_Macedonia, the former Yugoslav Republic of' => 'Macedonia, the former Yugoslav Republic of', - 'country_Egypt' => 'Egypt', - 'country_United Kingdom' => 'United Kingdom', + 'country_Egypt' => 'Египет', + 'country_United Kingdom' => 'Соединенное Королевство', 'country_Guernsey' => 'Guernsey', - 'country_Jersey' => 'Jersey', - 'country_Isle of Man' => 'Isle of Man', - 'country_Tanzania, United Republic of' => 'Tanzania, United Republic of', - 'country_United States' => 'United States', - 'country_Virgin Islands, U.S.' => 'Virgin Islands, U.S.', - 'country_Burkina Faso' => 'Burkina Faso', - 'country_Uruguay' => 'Uruguay', - 'country_Uzbekistan' => 'Uzbekistan', - 'country_Venezuela, Bolivarian Republic of' => 'Venezuela, Bolivarian Republic of', - 'country_Wallis and Futuna' => 'Wallis and Futuna', - 'country_Samoa' => 'Samoa', - 'country_Yemen' => 'Yemen', - 'country_Zambia' => 'Zambia', + 'country_Jersey' => 'Джерси', + 'country_Isle of Man' => 'о.Мэн', + 'country_Tanzania, United Republic of' => 'Танзания', + 'country_United States' => 'США', + 'country_Virgin Islands, U.S.' => 'Виргинские острова', + 'country_Burkina Faso' => 'Буркина-Фасо', + 'country_Uruguay' => 'Уругвай', + 'country_Uzbekistan' => 'Узбекистан', + 'country_Venezuela, Bolivarian Republic of' => 'Венесуэлла', + 'country_Wallis and Futuna' => 'острова Уоллис и Футуна', + 'country_Samoa' => 'Самоа', + 'country_Yemen' => 'Йемен', + 'country_Zambia' => 'Замбия', // Languages 'lang_Brazilian Portuguese' => 'Brazilian Portuguese', - 'lang_Croatian' => 'Croatian', - 'lang_Czech' => 'Czech', - 'lang_Danish' => 'Danish', - 'lang_Dutch' => 'Dutch', - 'lang_English' => 'English', - 'lang_French' => 'French', + 'lang_Croatian' => 'Хорватский', + 'lang_Czech' => 'Чешский', + 'lang_Danish' => 'датский', + 'lang_Dutch' => 'голландский', + 'lang_English' => 'английский', + 'lang_French' => 'французский', 'lang_French - Canada' => 'French - Canada', - 'lang_German' => 'German', - 'lang_Italian' => 'Italian', - 'lang_Japanese' => 'Japanese', - 'lang_Lithuanian' => 'Lithuanian', - 'lang_Norwegian' => 'Norwegian', - 'lang_Polish' => 'Polish', - 'lang_Spanish' => 'Spanish', + 'lang_German' => 'немецкий', + 'lang_Italian' => 'итальянский', + 'lang_Japanese' => 'японский', + 'lang_Lithuanian' => 'литовский', + 'lang_Norwegian' => 'норвежский', + 'lang_Polish' => 'польский', + 'lang_Spanish' => 'испанский', 'lang_Spanish - Spain' => 'Spanish - Spain', - 'lang_Swedish' => 'Swedish', - 'lang_Albanian' => 'Albanian', - 'lang_Greek' => 'Greek', - 'lang_English - United Kingdom' => 'English - United Kingdom', + 'lang_Swedish' => 'шведский', + 'lang_Albanian' => 'албанский', + 'lang_Greek' => 'Греческий', + 'lang_English - United Kingdom' => 'Английский - Соединенное Королевство', 'lang_English - Australia' => 'English - Australia', - 'lang_Slovenian' => 'Slovenian', - 'lang_Finnish' => 'Finnish', - 'lang_Romanian' => 'Romanian', - 'lang_Turkish - Turkey' => 'Turkish - Turkey', - 'lang_Portuguese - Brazilian' => 'Portuguese - Brazilian', - 'lang_Portuguese - Portugal' => 'Portuguese - Portugal', + 'lang_Slovenian' => 'словенский', + 'lang_Finnish' => 'финский', + 'lang_Romanian' => 'румынский', + 'lang_Turkish - Turkey' => 'турецкий - Турция', + 'lang_Portuguese - Brazilian' => 'португальский - Бразилия', + 'lang_Portuguese - Portugal' => 'португальский - Португалия', 'lang_Thai' => 'Thai', 'lang_Macedonian' => 'Macedonian', 'lang_Chinese - Taiwan' => 'Chinese - Taiwan', @@ -1814,14 +1815,14 @@ $LANG = array( 'vendor_contacts' => 'Vendor Contacts', 'all' => 'All', 'selected' => 'Selected', - 'category' => 'Category', - 'categories' => 'Categories', + 'category' => 'Категория', + 'categories' => 'Категории', 'new_expense_category' => 'New Expense Category', - 'edit_category' => 'Edit Category', + 'edit_category' => 'Изменить Категорию', 'archive_expense_category' => 'Archive Category', - 'expense_categories' => 'Expense Categories', - 'list_expense_categories' => 'List Expense Categories', - 'updated_expense_category' => 'Successfully updated expense category', + 'expense_categories' => 'Категория Затрат', + 'list_expense_categories' => 'Список Категорий Затрат', + 'updated_expense_category' => 'Категория Затрат успешно обновлена', 'created_expense_category' => 'Successfully created expense category', 'archived_expense_category' => 'Successfully archived expense category', 'archived_expense_categories' => 'Successfully archived :count expense category', @@ -1861,7 +1862,7 @@ $LANG = array( 'bot_emailed_invoice' => 'Your invoice has been sent.', 'bot_emailed_notify_viewed' => 'I\'ll email you when it\'s viewed.', 'bot_emailed_notify_paid' => 'I\'ll email you when it\'s paid.', - 'add_product_to_invoice' => 'Add 1 :product', + 'add_product_to_invoice' => 'Добавить 1 :product', 'not_authorized' => 'You are not authorized', 'bot_get_email' => 'Hi! (wave)
Thanks for trying the Invoice Ninja Bot.
You need to create a free account to use this bot.
Send me your account email address to get started.', 'bot_get_code' => 'Thanks! I\'ve sent a you an email with your security code.', @@ -1872,7 +1873,7 @@ $LANG = array( 'security_code_email_line1' => 'This is your Invoice Ninja Bot security code.', 'security_code_email_line2' => 'Note: it will expire in 10 minutes.', 'bot_help_message' => 'I currently support:
• Create\update\email an invoice
• List products
For example:
invoice bob for 2 tickets, set the due date to next thursday and the discount to 10 percent', - 'list_products' => 'List Products', + 'list_products' => 'Список товаров/услуг', 'include_item_taxes_inline' => 'Include line item taxes in line total', 'created_quotes' => 'Successfully created :count quotes(s)', @@ -1902,13 +1903,13 @@ $LANG = array( 'reseller_text' => 'Note: the white-label license is intended for personal use, please email us at :email if you\'d like to resell the app.', 'unnamed_client' => 'Unnamed Client', - 'day' => 'Day', - 'week' => 'Week', - 'month' => 'Month', + 'day' => 'День', + 'week' => 'Неделя', + 'month' => 'Месяц', 'inactive_logout' => 'You have been logged out due to inactivity', 'reports' => 'Reports', 'total_profit' => 'Total Profit', - 'total_expenses' => 'Total Expenses', + 'total_expenses' => 'Суммарные Затраты', 'quote_to' => 'Quote to', // Limits @@ -1928,8 +1929,8 @@ $LANG = array( 'raw_html' => 'Raw HTML', 'update' => 'Update', 'invoice_fields_help' => 'Drag and drop fields to change their order and location', - 'new_category' => 'New Category', - 'restore_product' => 'Restore Product', + 'new_category' => 'Новая категория', + 'restore_product' => 'Восстановить товар/услугу', 'blank' => 'Blank', 'invoice_save_error' => 'There was an error saving your invoice', 'enable_recurring' => 'Enable Recurring', @@ -1940,7 +1941,7 @@ $LANG = array( 'created_expenses' => 'Successfully created :count expense(s)', 'translate_app' => 'Help improve our translations with :link', - 'expense_category' => 'Expense Category', + 'expense_category' => 'Категория затрат', 'go_ninja_pro' => 'Go Ninja Pro!', 'go_enterprise' => 'Go Enterprise!', @@ -1964,7 +1965,7 @@ $LANG = array( 'invalid_white_label_license' => 'The white label license is not valid', 'created_by' => 'Created by :name', 'modules' => 'Modules', - 'financial_year_start' => 'First Month of the Year', + 'financial_year_start' => 'Первый месяц года', 'authentication' => 'Authentication', 'checkbox' => 'Checkbox', 'invoice_signature' => 'Signature', @@ -2015,7 +2016,7 @@ $LANG = array( 'vendor_name' => 'Vendor', 'entity_state' => 'State', - 'client_created_at' => 'Date Created', + 'client_created_at' => 'Дата создания', 'postmark_error' => 'There was a problem sending the email through Postmark: :link', 'project' => 'Project', 'projects' => 'Projects', @@ -2034,8 +2035,8 @@ $LANG = array( 'deleted_projects' => 'Successfully deleted :count projects', 'delete_expense_category' => 'Delete category', 'deleted_expense_category' => 'Successfully deleted category', - 'delete_product' => 'Delete Product', - 'deleted_product' => 'Successfully deleted product', + 'delete_product' => 'Удалить товар/услугу', + 'deleted_product' => 'Товар/услуга успешно удалены', 'deleted_products' => 'Successfully deleted :count products', 'restored_product' => 'Successfully restored product', 'update_credit' => 'Update Credit', @@ -2050,45 +2051,45 @@ $LANG = array( 'redirect_url_help' => 'Optionally specify a URL to redirect to after a payment is entered.', 'save_draft' => 'Save Draft', 'refunded_credit_payment' => 'Refunded credit payment', - 'keyboard_shortcuts' => 'Keyboard Shortcuts', - 'toggle_menu' => 'Toggle Menu', - 'new_...' => 'New ...', - 'list_...' => 'List ...', - 'created_at' => 'Date Created', - 'contact_us' => 'Contact Us', - 'user_guide' => 'User Guide', + 'keyboard_shortcuts' => 'Горячие клавиши', + 'toggle_menu' => 'Скрыть меню', + 'new_...' => 'Новый...', + 'list_...' => 'Список...', + 'created_at' => 'Дата создания', + 'contact_us' => 'Свяжитесь с нами', + 'user_guide' => 'Руководство пользователя', 'promo_message' => 'Upgrade before :expires and get :amount OFF your first year of our Pro or Enterprise packages.', 'discount_message' => ':amount off expires :expires', - 'mark_paid' => 'Mark Paid', + 'mark_paid' => 'Отметить оплаченным', 'marked_sent_invoice' => 'Successfully marked invoice sent', 'marked_sent_invoices' => 'Successfully marked invoices sent', - 'invoice_name' => 'Invoice', - 'product_will_create' => 'product will be created', - 'contact_us_response' => 'Thank you for your message! We\'ll try to respond as soon as possible.', - 'last_7_days' => 'Last 7 Days', - 'last_30_days' => 'Last 30 Days', - 'this_month' => 'This Month', - 'last_month' => 'Last Month', + 'invoice_name' => 'Счёт', + 'product_will_create' => 'будет создан(а) товар/услуга ', + 'contact_us_response' => 'Спасибо за Ваше сообщение! Мы постараемся ответить как можно скорее.', + 'last_7_days' => 'Последние 7 дней', + 'last_30_days' => 'Последние 30 дней', + 'this_month' => 'Текущий месяц', + 'last_month' => 'Прошлый месяц', 'current_quarter' => 'Current Quarter', 'last_quarter' => 'Last Quarter', - 'last_year' => 'Last Year', + 'last_year' => 'Прошлый год', 'custom_range' => 'Custom Range', 'url' => 'URL', - 'debug' => 'Debug', + 'debug' => 'Отладка', 'https' => 'HTTPS', 'require' => 'Require', - 'license_expiring' => 'Note: Your license will expire in :count days, :link to renew it.', - 'security_confirmation' => 'Your email address has been confirmed.', + 'license_expiring' => 'Примечание. Срок действия вашей лицензии истекает через :count days, :link, чтобы обновить ее.', + 'security_confirmation' => 'Ваш адрес эл.почты подтвержден.', 'white_label_expired' => 'Your white label license has expired, please consider renewing it to help support our project.', 'renew_license' => 'Renew License', 'iphone_app_message' => 'Consider downloading our :link', - 'iphone_app' => 'iPhone app', - 'android_app' => 'Android app', - 'logged_in' => 'Logged In', + 'iphone_app' => 'приложение для iPhone', + 'android_app' => 'Приложение для Android', + 'logged_in' => 'Успешный вход', 'switch_to_primary' => 'Switch to your primary company (:name) to manage your plan.', 'inclusive' => 'Inclusive', 'exclusive' => 'Exclusive', - 'postal_city_state' => 'Postal/City/State', + 'postal_city_state' => 'Индекс/Город/Страна', 'phantomjs_help' => 'In certain cases the app uses :link_phantom to generate the PDF, install :link_docs to generate it locally.', 'phantomjs_local' => 'Using local PhantomJS', 'client_number' => 'Client Number', @@ -2104,34 +2105,34 @@ $LANG = array( 'tax_invoice' => 'Tax Invoice', 'emailed_invoices' => 'Successfully emailed invoices', 'emailed_quotes' => 'Successfully emailed quotes', - 'website_url' => 'Website URL', + 'website_url' => 'URL веб-сайта', 'domain' => 'Domain', 'domain_help' => 'Used in the client portal and when sending emails.', 'domain_help_website' => 'Used when sending emails.', - 'import_invoices' => 'Import Invoices', - 'new_report' => 'New Report', - 'edit_report' => 'Edit Report', - 'columns' => 'Columns', - 'filters' => 'Filters', + 'import_invoices' => 'Импортировать счета', + 'new_report' => 'Создать отчёт', + 'edit_report' => 'Редактировать отчёт', + 'columns' => 'Столбцы', + 'filters' => 'Фильтры', 'sort_by' => 'Sort By', - 'draft' => 'Draft', - 'unpaid' => 'Unpaid', + 'draft' => 'Черновик', + 'unpaid' => 'Неоплачено', 'aging' => 'Aging', - 'age' => 'Age', - 'days' => 'Days', - 'age_group_0' => '0 - 30 Days', - 'age_group_30' => '30 - 60 Days', - 'age_group_60' => '60 - 90 Days', - 'age_group_90' => '90 - 120 Days', - 'age_group_120' => '120+ Days', - 'invoice_details' => 'Invoice Details', - 'qty' => 'Quantity', - 'profit_and_loss' => 'Profit and Loss', + 'age' => 'Возраст', + 'days' => 'Дни', + 'age_group_0' => '0-30 дней', + 'age_group_30' => '30-60 дней', + 'age_group_60' => '60-90 дней', + 'age_group_90' => '90-120 дней', + 'age_group_120' => '120+ дней', + 'invoice_details' => 'Детали счёта', + 'qty' => 'Количество', + 'profit_and_loss' => 'Прибыли и убытки', 'revenue' => 'Revenue', 'profit' => 'Profit', 'group_when_sorted' => 'Group Sort', 'group_dates_by' => 'Group Dates By', - 'year' => 'Year', + 'year' => 'Год', 'view_statement' => 'View Statement', 'statement' => 'Statement', 'statement_date' => 'Statement Date', @@ -2140,9 +2141,9 @@ $LANG = array( 'initial_email' => 'Initial Email', 'invoice_not_emailed' => 'This invoice hasn\'t been emailed.', 'quote_not_emailed' => 'This quote hasn\'t been emailed.', - 'sent_by' => 'Sent by :user', - 'recipients' => 'Recipients', - 'save_as_default' => 'Save as default', + 'sent_by' => 'Отправлено :user', + 'recipients' => 'Получатели', + 'save_as_default' => 'По умолчанию', 'start_of_week_help' => 'Used by date selectors', 'financial_year_start_help' => 'Used by date range selectors', 'reports_help' => 'Shift + Click to sort by multiple columns, Ctrl + Click to clear the grouping.', @@ -2151,22 +2152,22 @@ $LANG = array( // Updated login screen 'ninja_tagline' => 'Create. Send. Get Paid.', 'login_or_existing' => 'Or login with a connected account.', - 'sign_up_now' => 'Sign Up Now', - 'not_a_member_yet' => 'Not a member yet?', - 'login_create_an_account' => 'Create an Account!', + 'sign_up_now' => 'Зарегистрироваться сейчас', + 'not_a_member_yet' => 'Еще на с нами?', + 'login_create_an_account' => 'Создать аккаунт', // New Client Portal styling - 'invoice_from' => 'Invoices From:', - 'email_alias_message' => 'We require each company to have a unique email address.
Consider using an alias. ie, email+label@example.com', - 'full_name' => 'Full Name', - 'month_year' => 'MONTH/YEAR', - 'valid_thru' => 'Valid\nthru', + 'invoice_from' => 'Счета от:', + 'email_alias_message' => 'Каждая компании обязана иметь уникальный адрес электронной почты. Рассмотрите использование псевдонима, н-р. email+label@example.com', + 'full_name' => 'Полное имя', + 'month_year' => 'Месяц/Год', + 'valid_thru' => 'Действителен до', - 'product_fields' => 'Product Fields', + 'product_fields' => 'Поля товара/услуги', 'custom_product_fields_help' => 'Add a field when creating a product or invoice and display the label and value on the PDF.', - 'freq_two_months' => 'Two months', - 'freq_yearly' => 'Annually', - 'profile' => 'Profile', + 'freq_two_months' => 'Два месяца', + 'freq_yearly' => 'Ежегодно', + 'profile' => 'Профиль', 'payment_type_help' => 'Sets the default manual payment type.', 'industry_Construction' => 'Construction', 'your_statement' => 'Your Statement', @@ -2176,56 +2177,56 @@ $LANG = array( 'created_payment_term' => 'Successfully created payment term', 'updated_payment_term' => 'Successfully updated payment term', 'archived_payment_term' => 'Successfully archived payment term', - 'resend_invite' => 'Resend Invitation', + 'resend_invite' => 'Послать приглашение еще раз', 'credit_created_by' => 'Credit created by payment :transaction_reference', 'created_payment_and_credit' => 'Successfully created payment and credit', 'created_payment_and_credit_emailed_client' => 'Successfully created payment and credit, and emailed client', - 'create_project' => 'Create project', - 'create_vendor' => 'Create vendor', - 'create_expense_category' => 'Create category', + 'create_project' => 'Создать проект', + 'create_vendor' => 'Создать поставщика', + 'create_expense_category' => 'Создать категорию', 'pro_plan_reports' => ':link to enable reports by joining the Pro Plan', - 'mark_ready' => 'Mark Ready', + 'mark_ready' => 'Отметить готовым', - 'limits' => 'Limits', - 'fees' => 'Fees', - 'fee' => 'Fee', + 'limits' => 'Лимиты', + 'fees' => 'Платы', + 'fee' => 'Плата', 'set_limits_fees' => 'Set :gateway_type Limits/Fees', 'fees_tax_help' => 'Enable line item taxes to set the fee tax rates.', 'fees_sample' => 'The fee for a :amount invoice would be :total.', 'discount_sample' => 'The discount for a :amount invoice would be :total.', - 'no_fees' => 'No Fees', - 'gateway_fees_disclaimer' => 'Warning: not all states/payment gateways allow adding fees, please review local laws/terms of service.', - 'percent' => 'Percent', - 'location' => 'Location', + 'no_fees' => 'Нет платы', + 'gateway_fees_disclaimer' => 'Предупреждение: не все штаты / платежные шлюзы разрешают добавлять сборы, пожалуйста, ознакомьтесь с местными законы / условиями обслуживания.', + 'percent' => 'Процент', + 'location' => 'Местоположение', 'line_item' => 'Line Item', 'surcharge' => 'Surcharge', 'location_first_surcharge' => 'Enabled - First surcharge', 'location_second_surcharge' => 'Enabled - Second surcharge', 'location_line_item' => 'Enabled - Line item', - 'online_payment_surcharge' => 'Online Payment Surcharge', - 'gateway_fees' => 'Gateway Fees', - 'fees_disabled' => 'Fees are disabled', - 'gateway_fees_help' => 'Automatically add an online payment surcharge/discount.', - 'gateway' => 'Gateway', + 'online_payment_surcharge' => 'Комиссия при оплате онлайн', + 'gateway_fees' => 'Комиссия платёжного шлюза', + 'fees_disabled' => 'Плата отсутствует.', + 'gateway_fees_help' => 'Автоматически учитывать сумму комиссии / скидки за онлайн платёж.', + 'gateway' => 'Шлюз', 'gateway_fee_change_warning' => 'If there are unpaid invoices with fees they need to be updated manually.', 'fees_surcharge_help' => 'Customize surcharge :link.', 'label_and_taxes' => 'label and taxes', - 'billable' => 'Billable', - 'logo_warning_too_large' => 'The image file is too large.', - 'logo_warning_fileinfo' => 'Warning: To support gifs the fileinfo PHP extension needs to be enabled.', - 'logo_warning_invalid' => 'There was a problem reading the image file, please try a different format.', + 'billable' => 'Оплачиваемый', + 'logo_warning_too_large' => 'Размер изображения слишком большой.', + 'logo_warning_fileinfo' => 'Предупреждение. Для поддержки gif необходимо, чтобы расширение PHP было включено.', + 'logo_warning_invalid' => 'Не удалось прочитать файл изображения, попробуйте другой формат.', - 'error_refresh_page' => 'An error occurred, please refresh the page and try again.', - 'data' => 'Data', - 'imported_settings' => 'Successfully imported settings', + 'error_refresh_page' => 'Произошла ошибка, обновите страницу и повторите попытку.', + 'data' => 'Дата', + 'imported_settings' => 'Настройки успешно импортированы', 'reset_counter' => 'Reset Counter', 'next_reset' => 'Next Reset', 'reset_counter_help' => 'Automatically reset the invoice and quote counters.', 'auto_bill_failed' => 'Auto-billing for invoice :invoice_number failed', - 'online_payment_discount' => 'Online Payment Discount', - 'created_new_company' => 'Successfully created new company', - 'fees_disabled_for_gateway' => 'Fees are disabled for this gateway.', - 'logout_and_delete' => 'Log Out/Delete Account', + 'online_payment_discount' => 'Скидка при платеже онлайн', + 'created_new_company' => 'Новая компания успешно создана', + 'fees_disabled_for_gateway' => 'Плата для этого шлюза отсутствует.', + 'logout_and_delete' => 'Выйти/Удалить аккаунт', 'tax_rate_type_help' => 'Inclusive tax rates adjust the line item cost when selected.
Only exclusive tax rates can be used as a default.', 'invoice_footer_help' => 'Use $pageNumber and $pageCount to display the page information.', 'credit_note' => 'Credit Note', @@ -2234,28 +2235,28 @@ $LANG = array( 'your_credit' => 'Your Credit', 'credit_number' => 'Credit Number', 'create_credit_note' => 'Create Credit Note', - 'menu' => 'Menu', - 'error_incorrect_gateway_ids' => 'Error: The gateways table has incorrect ids.', + 'menu' => 'Меню', + 'error_incorrect_gateway_ids' => 'Ошибка: таблица шлюзов имеет неправильные идентификаторы.', 'purge_data' => 'Purge Data', 'delete_data' => 'Delete Data', - 'purge_data_help' => 'Permanently delete all data but keep the account and settings.', - 'cancel_account_help' => 'Permanently delete the account along with all data and setting.', - 'purge_successful' => 'Successfully purged company data', - 'forbidden' => 'Forbidden', + 'purge_data_help' => 'Безвозвратно удалить все данные и настройки учетной записи.', + 'cancel_account_help' => 'Безвозвратно удалить учетную запись со всеми данными и настройками.', + 'purge_successful' => 'Информация о компании успешно удалена', + 'forbidden' => 'Запрещено', 'purge_data_message' => 'Warning: This will permanently erase your data, there is no undo.', - 'contact_phone' => 'Contact Phone', - 'contact_email' => 'Contact Email', - 'reply_to_email' => 'Reply-To Email', + 'contact_phone' => 'Контактный номер', + 'contact_email' => 'Почта для связи', + 'reply_to_email' => 'Ответить на сообщение', 'reply_to_email_help' => 'Specify the reply-to address for client emails.', 'bcc_email_help' => 'Privately include this address with client emails.', - 'import_complete' => 'Your import has successfully completed.', - 'confirm_account_to_import' => 'Please confirm your account to import data.', - 'import_started' => 'Your import has started, we\'ll send you an email once it completes.', + 'import_complete' => 'Импорт успешно завершён.', + 'confirm_account_to_import' => 'Подтвердите свою учетную запись, чтобы импортировать данные.', + 'import_started' => 'Импорт начался, мы отправим вам электронное письмо после его завершения.', 'listening' => 'Listening...', 'microphone_help' => 'Say "new invoice for [client]" or "show me [client]\'s archived payments"', - 'voice_commands' => 'Voice Commands', - 'sample_commands' => 'Sample commands', - 'voice_commands_feedback' => 'We\'re actively working to improve this feature, if there\'s a command you\'d like us to support please email us at :email.', + 'voice_commands' => 'Голосовые команды', + 'sample_commands' => 'Примеры команд', + 'voice_commands_feedback' => 'Мы активно работаем над улучшением этой функции, если есть команда, которую вы хотели бы увидеть, напишите нам по электронной почте :email.', 'payment_type_Venmo' => 'Venmo', 'payment_type_Money Order' => 'Money Order', 'archived_products' => 'Successfully archived :count products', @@ -2265,7 +2266,7 @@ $LANG = array( 'surcharge_label' => 'Surcharge Label', 'contact_fields' => 'Contact Fields', 'custom_contact_fields_help' => 'Add a field when creating a contact and optionally display the label and value on the PDF.', - 'datatable_info' => 'Showing :start to :end of :total entries', + 'datatable_info' => 'Показано :start to :end из :total строк', 'credit_total' => 'Credit Total', 'mark_billable' => 'Mark billable', 'billed' => 'Billed', @@ -2275,49 +2276,49 @@ $LANG = array( 'navigation_variables' => 'Navigation Variables', 'custom_variables' => 'Custom Variables', 'invalid_file' => 'Invalid file type', - 'add_documents_to_invoice' => 'Add documents to invoice', - 'mark_expense_paid' => 'Mark paid', + 'add_documents_to_invoice' => 'Добавить документы в Счёт', + 'mark_expense_paid' => 'Отметить оплаченным', 'white_label_license_error' => 'Failed to validate the license, check storage/logs/laravel-error.log for more details.', 'plan_price' => 'Plan Price', - 'wrong_confirmation' => 'Incorrect confirmation code', - 'oauth_taken' => 'The account is already registered', + 'wrong_confirmation' => 'Неверный код подтверждения', + 'oauth_taken' => 'Учетная запись уже существует', 'emailed_payment' => 'Successfully emailed payment', 'email_payment' => 'Email Payment', 'invoiceplane_import' => 'Use :link to migrate your data from InvoicePlane.', 'duplicate_expense_warning' => 'Warning: This :link may be a duplicate', - 'expense_link' => 'expense', - 'resume_task' => 'Resume Task', - 'resumed_task' => 'Successfully resumed task', - 'quote_design' => 'Quote Design', - 'default_design' => 'Standard Design', - 'custom_design1' => 'Custom Design 1', - 'custom_design2' => 'Custom Design 2', - 'custom_design3' => 'Custom Design 3', - 'empty' => 'Empty', - 'load_design' => 'Load Design', + 'expense_link' => 'расход', + 'resume_task' => 'Возобновить задание', + 'resumed_task' => 'Задание успешно возобновлено', + 'quote_design' => 'Шаблон котировок', + 'default_design' => 'Стандартный шаблон', + 'custom_design1' => 'Пользовательский шаблон 1', + 'custom_design2' => 'Пользовательский шаблон 2', + 'custom_design3' => 'Пользовательский шаблон 3', + 'empty' => 'Пусто', + 'load_design' => 'Загрузить шаблон', 'accepted_card_logos' => 'Accepted Card Logos', - 'phantomjs_local_and_cloud' => 'Using local PhantomJS, falling back to phantomjscloud.com', + 'phantomjs_local_and_cloud' => 'Используется локального PhantomJS, назад к phantomjscloud.com', 'google_analytics' => 'Google Analytics', 'analytics_key' => 'Analytics Key', - 'analytics_key_help' => 'Track payments using :link', - 'start_date_required' => 'The start date is required', - 'application_settings' => 'Application Settings', - 'database_connection' => 'Database Connection', + 'analytics_key_help' => 'Отслеживайте платежи используя :link', + 'start_date_required' => 'Укажите дату начала', + 'application_settings' => 'Настройки приложения', + 'database_connection' => 'Соединение с БД', 'driver' => 'Driver', - 'host' => 'Host', - 'database' => 'Database', - 'test_connection' => 'Test connection', + 'host' => 'Хост', + 'database' => 'База данных', + 'test_connection' => 'Проверить соединение', 'from_name' => 'From Name', - 'from_address' => 'From Address', - 'port' => 'Port', - 'encryption' => 'Encryption', - 'mailgun_domain' => 'Mailgun Domain', - 'mailgun_private_key' => 'Mailgun Private Key', - 'send_test_email' => 'Send test email', - 'select_label' => 'Select Label', + 'from_address' => 'От', + 'port' => 'Порт', + 'encryption' => 'Шифрование', + 'mailgun_domain' => 'Домен рассылки', + 'mailgun_private_key' => 'Ключ почтовой рассылки', + 'send_test_email' => 'Отправить тестовое сообщение', + 'select_label' => 'Выбрать ярлык', 'label' => 'Label', - 'service' => 'Service', - 'update_payment_details' => 'Update payment details', + 'service' => 'Услуга', + 'update_payment_details' => 'Обновить платежные данные', 'updated_payment_details' => 'Successfully updated payment details', 'update_credit_card' => 'Update Credit Card', 'recurring_expenses' => 'Recurring Expenses', @@ -2326,111 +2327,111 @@ $LANG = array( 'edit_recurring_expense' => 'Edit Recurring Expense', 'archive_recurring_expense' => 'Archive Recurring Expense', 'list_recurring_expense' => 'List Recurring Expenses', - 'updated_recurring_expense' => 'Successfully updated recurring expense', + 'updated_recurring_expense' => 'Повторяющаяся Затрата успешно обновлена', 'created_recurring_expense' => 'Successfully created recurring expense', 'archived_recurring_expense' => 'Successfully archived recurring expense', 'restore_recurring_expense' => 'Restore Recurring Expense', 'restored_recurring_expense' => 'Successfully restored recurring expense', 'delete_recurring_expense' => 'Delete Recurring Expense', - 'deleted_recurring_expense' => 'Successfully deleted project', - 'view_recurring_expense' => 'View Recurring Expense', - 'taxes_and_fees' => 'Taxes and fees', - 'import_failed' => 'Import Failed', - 'recurring_prefix' => 'Recurring Prefix', - 'options' => 'Options', - 'credit_number_help' => 'Specify a prefix or use a custom pattern to dynamically set the credit number for negative invoices.', + 'deleted_recurring_expense' => 'Проект успешно удален', + 'view_recurring_expense' => 'Просмотреть повторяющийся расходы', + 'taxes_and_fees' => 'Налоги и платежи', + 'import_failed' => 'Не удалось импортировать', + 'recurring_prefix' => 'Повторяющийся префикс', + 'options' => 'Настройки', + 'credit_number_help' => 'Укажите префикс или используйте собственный шаблон, чтобы динамически установить номер кредита для отрицательных счетов.', 'next_credit_number' => 'The next credit number is :number.', - 'padding_help' => 'The number of zero\'s to pad the number.', - 'import_warning_invalid_date' => 'Warning: The date format appears to be invalid.', - 'product_notes' => 'Product Notes', - 'app_version' => 'App Version', - 'ofx_version' => 'OFX Version', - 'gateway_help_23' => ':link to get your Stripe API keys.', - 'error_app_key_set_to_default' => 'Error: APP_KEY is set to a default value, to update it backup your database and then run php artisan ninja:update-key', - 'charge_late_fee' => 'Charge Late Fee', - 'late_fee_amount' => 'Late Fee Amount', - 'late_fee_percent' => 'Late Fee Percent', - 'late_fee_added' => 'Late fee added on :date', - 'download_invoice' => 'Download Invoice', - 'download_quote' => 'Download Quote', - 'invoices_are_attached' => 'Your invoice PDFs are attached.', + 'padding_help' => 'Число нулей для заполнения номера.', + 'import_warning_invalid_date' => 'Предупреждение. Неверный формат даты.', + 'product_notes' => 'Примечания к товару/услуге', + 'app_version' => 'Версия приложения', + 'ofx_version' => 'OFX Версия', + 'gateway_help_23' => ':link, чтобы получить ключи Stripe API.', + 'error_app_key_set_to_default' => 'Ошибка: для APP_KEY установлено значение по умолчанию, чтобы обновить его, создайте резервную копию базы данных, а затем запустить php artisan ninja: update-key', + 'charge_late_fee' => 'Пеня', + 'late_fee_amount' => 'Сумма пени', + 'late_fee_percent' => 'Процент пени', + 'late_fee_added' => 'Пеня начислена :date', + 'download_invoice' => 'Скачать счёт', + 'download_quote' => 'Скачать котировки', + 'invoices_are_attached' => 'Счёт в PDF прикреплён ', 'downloaded_invoice' => 'An email will be sent with the invoice PDF', 'downloaded_quote' => 'An email will be sent with the quote PDF', 'downloaded_invoices' => 'An email will be sent with the invoice PDFs', 'downloaded_quotes' => 'An email will be sent with the quote PDFs', 'clone_expense' => 'Clone Expense', - 'default_documents' => 'Default Documents', - 'send_email_to_client' => 'Send email to the client', + 'default_documents' => 'Документы по умолчанию', + 'send_email_to_client' => 'Отправлять клиенту письмо', 'refund_subject' => 'Refund Processed', 'refund_body' => 'You have been processed a refund of :amount for invoice :invoice_number.', - 'currency_us_dollar' => 'US Dollar', - 'currency_british_pound' => 'British Pound', - 'currency_euro' => 'Euro', - 'currency_south_african_rand' => 'South African Rand', - 'currency_danish_krone' => 'Danish Krone', - 'currency_israeli_shekel' => 'Israeli Shekel', - 'currency_swedish_krona' => 'Swedish Krona', - 'currency_kenyan_shilling' => 'Kenyan Shilling', - 'currency_canadian_dollar' => 'Canadian Dollar', - 'currency_philippine_peso' => 'Philippine Peso', - 'currency_indian_rupee' => 'Indian Rupee', - 'currency_australian_dollar' => 'Australian Dollar', - 'currency_singapore_dollar' => 'Singapore Dollar', - 'currency_norske_kroner' => 'Norske Kroner', - 'currency_new_zealand_dollar' => 'New Zealand Dollar', - 'currency_vietnamese_dong' => 'Vietnamese Dong', - 'currency_swiss_franc' => 'Swiss Franc', - 'currency_guatemalan_quetzal' => 'Guatemalan Quetzal', - 'currency_malaysian_ringgit' => 'Malaysian Ringgit', - 'currency_brazilian_real' => 'Brazilian Real', - 'currency_thai_baht' => 'Thai Baht', - 'currency_nigerian_naira' => 'Nigerian Naira', - 'currency_argentine_peso' => 'Argentine Peso', - 'currency_bangladeshi_taka' => 'Bangladeshi Taka', - 'currency_united_arab_emirates_dirham' => 'United Arab Emirates Dirham', - 'currency_hong_kong_dollar' => 'Hong Kong Dollar', - 'currency_indonesian_rupiah' => 'Indonesian Rupiah', - 'currency_mexican_peso' => 'Mexican Peso', - 'currency_egyptian_pound' => 'Egyptian Pound', - 'currency_colombian_peso' => 'Colombian Peso', - 'currency_west_african_franc' => 'West African Franc', - 'currency_chinese_renminbi' => 'Chinese Renminbi', - 'currency_rwandan_franc' => 'Rwandan Franc', - 'currency_tanzanian_shilling' => 'Tanzanian Shilling', - 'currency_netherlands_antillean_guilder' => 'Netherlands Antillean Guilder', - 'currency_trinidad_and_tobago_dollar' => 'Trinidad and Tobago Dollar', - 'currency_east_caribbean_dollar' => 'East Caribbean Dollar', - 'currency_ghanaian_cedi' => 'Ghanaian Cedi', - 'currency_bulgarian_lev' => 'Bulgarian Lev', - 'currency_aruban_florin' => 'Aruban Florin', - 'currency_turkish_lira' => 'Turkish Lira', - 'currency_romanian_new_leu' => 'Romanian New Leu', - 'currency_croatian_kuna' => 'Croatian Kuna', - 'currency_saudi_riyal' => 'Saudi Riyal', - 'currency_japanese_yen' => 'Japanese Yen', - 'currency_maldivian_rufiyaa' => 'Maldivian Rufiyaa', - 'currency_costa_rican_colon' => 'Costa Rican Colón', - 'currency_pakistani_rupee' => 'Pakistani Rupee', - 'currency_polish_zloty' => 'Polish Zloty', - 'currency_sri_lankan_rupee' => 'Sri Lankan Rupee', - 'currency_czech_koruna' => 'Czech Koruna', - 'currency_uruguayan_peso' => 'Uruguayan Peso', - 'currency_namibian_dollar' => 'Namibian Dollar', - 'currency_tunisian_dinar' => 'Tunisian Dinar', - 'currency_russian_ruble' => 'Russian Ruble', - 'currency_mozambican_metical' => 'Mozambican Metical', - 'currency_omani_rial' => 'Omani Rial', - 'currency_ukrainian_hryvnia' => 'Ukrainian Hryvnia', - 'currency_macanese_pataca' => 'Macanese Pataca', - 'currency_taiwan_new_dollar' => 'Taiwan New Dollar', - 'currency_dominican_peso' => 'Dominican Peso', - 'currency_chilean_peso' => 'Chilean Peso', - 'currency_icelandic_krona' => 'Icelandic Króna', - 'currency_papua_new_guinean_kina' => 'Papua New Guinean Kina', - 'currency_jordanian_dinar' => 'Jordanian Dinar', - 'currency_myanmar_kyat' => 'Myanmar Kyat', - 'currency_peruvian_sol' => 'Peruvian Sol', + 'currency_us_dollar' => 'Доллар США', + 'currency_british_pound' => 'Британский фунт', + 'currency_euro' => 'Евро', + 'currency_south_african_rand' => 'Южноафриканский рэнд', + 'currency_danish_krone' => 'Датская крона', + 'currency_israeli_shekel' => 'Израильский шекель', + 'currency_swedish_krona' => 'Шведская крона', + 'currency_kenyan_shilling' => 'Кенийский шиллинг', + 'currency_canadian_dollar' => 'Канадский доллар', + 'currency_philippine_peso' => 'Филиппинское песо', + 'currency_indian_rupee' => 'Индийская рупия', + 'currency_australian_dollar' => 'Австралийский доллар', + 'currency_singapore_dollar' => 'Сингапурский доллар', + 'currency_norske_kroner' => 'Норвежская крона', + 'currency_new_zealand_dollar' => 'Новозеландский доллар', + 'currency_vietnamese_dong' => 'Вьетнамский донг', + 'currency_swiss_franc' => 'Шведский франк', + 'currency_guatemalan_quetzal' => 'Гватемальский кецаль', + 'currency_malaysian_ringgit' => 'Малайзийский ринггит', + 'currency_brazilian_real' => 'Бразильский реал', + 'currency_thai_baht' => 'Тайский бат', + 'currency_nigerian_naira' => 'Нигерийская найра', + 'currency_argentine_peso' => 'Аргентинское песо', + 'currency_bangladeshi_taka' => 'Бангладешский така', + 'currency_united_arab_emirates_dirham' => 'дирхам Объединённых Арабских Эмиратов', + 'currency_hong_kong_dollar' => 'Гонконгский доллар', + 'currency_indonesian_rupiah' => 'Индонезийская рупия', + 'currency_mexican_peso' => 'Мексиканское песо', + 'currency_egyptian_pound' => 'Египетский фунт', + 'currency_colombian_peso' => 'Колумбийское песо', + 'currency_west_african_franc' => 'Западно-африканский франк', + 'currency_chinese_renminbi' => 'Китайский юань', + 'currency_rwandan_franc' => 'Руандийский франк', + 'currency_tanzanian_shilling' => 'Танзанийский шиллинг', + 'currency_netherlands_antillean_guilder' => 'Нидерландский гульден', + 'currency_trinidad_and_tobago_dollar' => 'Доллар Тринидада и Тобаго', + 'currency_east_caribbean_dollar' => 'Восточно-карибский доллар', + 'currency_ghanaian_cedi' => 'Ганайский седи', + 'currency_bulgarian_lev' => 'Болгарский лев', + 'currency_aruban_florin' => 'Арубанский флорин', + 'currency_turkish_lira' => 'Турецкая лира', + 'currency_romanian_new_leu' => 'Румынский лей', + 'currency_croatian_kuna' => 'Хорватская куна', + 'currency_saudi_riyal' => 'Саудовский риал', + 'currency_japanese_yen' => 'Японская йена', + 'currency_maldivian_rufiyaa' => 'Мальдивская руфия', + 'currency_costa_rican_colon' => 'Коста-риканский колон', + 'currency_pakistani_rupee' => 'Пакистанская рупия', + 'currency_polish_zloty' => 'Польский злотый', + 'currency_sri_lankan_rupee' => 'Шри-ланскийская рупия', + 'currency_czech_koruna' => 'Чешская крона', + 'currency_uruguayan_peso' => 'Уругвайский песо', + 'currency_namibian_dollar' => 'Намибийский доллар', + 'currency_tunisian_dinar' => 'Тунисский динар', + 'currency_russian_ruble' => 'Российский рубль', + 'currency_mozambican_metical' => 'Мозамбикский метикал', + 'currency_omani_rial' => 'Оманский риал', + 'currency_ukrainian_hryvnia' => 'Украинская гривна', + 'currency_macanese_pataca' => 'Патака Макао', + 'currency_taiwan_new_dollar' => 'Новый тайваньский доллар', + 'currency_dominican_peso' => 'Доминиканский песо', + 'currency_chilean_peso' => 'Чилийский песо', + 'currency_icelandic_krona' => 'Исландская крона', + 'currency_papua_new_guinean_kina' => 'Кина', + 'currency_jordanian_dinar' => 'Иорданский динар', + 'currency_myanmar_kyat' => 'Кьят', + 'currency_peruvian_sol' => 'Перуанский соль', 'currency_botswana_pula' => 'Botswana Pula', 'currency_hungarian_forint' => 'Hungarian Forint', 'currency_ugandan_shilling' => 'Ugandan Shilling', @@ -2471,10 +2472,10 @@ $LANG = array( 'review_app_help' => 'We hope you\'re enjoying using the app.
If you\'d consider :link we\'d greatly appreciate it!', 'writing_a_review' => 'writing a review', - 'use_english_version' => 'Make sure to use the English version of the files.
We use the column headers to match the fields.', + 'use_english_version' => 'Обязательно используйте английскую версию файлов. Мы используем заголовки столбцов для соответствия полям.', 'tax1' => 'First Tax', 'tax2' => 'Second Tax', - 'fee_help' => 'Gateway fees are the costs charged for access to the financial networks that handle the processing of online payments.', + 'fee_help' => 'Плата за услуги платежного шлюза - это платежи, взимаемые за доступ к финансовым сетям, которые обрабатывают онлайн-платежи.', 'format_export' => 'Exporting format', 'custom1' => 'First Custom', 'custom2' => 'Second Custom', @@ -2482,12 +2483,12 @@ $LANG = array( 'contact_last_name' => 'Contact Last Name', 'contact_custom1' => 'Contact First Custom', 'contact_custom2' => 'Contact Second Custom', - 'currency' => 'Currency', + 'currency' => 'Валюта', 'ofx_help' => 'To troubleshoot check for comments on :ofxhome_link and test with :ofxget_link.', 'comments' => 'comments', 'item_product' => 'Item Product', - 'item_notes' => 'Item Notes', + 'item_notes' => 'Заметки', 'item_cost' => 'Item Cost', 'item_quantity' => 'Item Quantity', 'item_tax_rate' => 'Item Tax Rate', @@ -2495,39 +2496,39 @@ $LANG = array( 'item_tax1' => 'Item Tax1', 'item_tax2' => 'Item Tax2', - 'delete_company' => 'Delete Company', - 'delete_company_help' => 'Permanently delete the company along with all data and setting.', - 'delete_company_message' => 'Warning: This will permanently delete your company, there is no undo.', + 'delete_company' => 'Удалить компанию', + 'delete_company_help' => 'Безвозвратно удалить компанию со всеми данными и настройками.', + 'delete_company_message' => 'Внимание: это приведет к безвозвратному удалению вашего аккаунта.', - 'applied_discount' => 'The coupon has been applied, the plan price has been reduced by :discount%.', - 'applied_free_year' => 'The coupon has been applied, your account has been upgraded to pro for one year.', + 'applied_discount' => 'Купон был применен, цена плана была уменьшена на :discount%.', + 'applied_free_year' => 'Купон был применен, ваша учетная запись была обновлена до Pro на один год.', - 'contact_us_help' => 'If you\'re reporting an error please include any relevant logs from storage/logs/laravel-error.log', - 'include_errors' => 'Include Errors', - 'include_errors_help' => 'Include :link from storage/logs/laravel-error.log', - 'recent_errors' => 'recent errors', - 'customer' => 'Customer', - 'customers' => 'Customers', - 'created_customer' => 'Successfully created customer', - 'created_customers' => 'Successfully created :count customers', + 'contact_us_help' => 'Если вы сообщаете об ошибке, включите любые соответствующие журналы из storage/logs/laravel-error.log', + 'include_errors' => 'Включить ошибки', + 'include_errors_help' => 'Укажите :link из storage/logs/laravel-error.log', + 'recent_errors' => 'последние ошибки', + 'customer' => 'Клиент', + 'customers' => 'Клиенты', + 'created_customer' => 'Успешно создан :count клиент', + 'created_customers' => 'Успешно создано :count клиентов', - 'purge_details' => 'The data in your company (:account) has been successfully purged.', + 'purge_details' => 'Данные Вашей компании (:account) были успешно удалены.', 'deleted_company' => 'Successfully deleted company', 'deleted_account' => 'Successfully canceled account', - 'deleted_company_details' => 'Your company (:account) has been successfully deleted.', - 'deleted_account_details' => 'Your account (:account) has been successfully deleted.', + 'deleted_company_details' => 'Ваша компания (:account) успешно удалена.', + 'deleted_account_details' => 'Ваша учетная запись (:account) успешно удалена.', 'alipay' => 'Alipay', 'sofort' => 'Sofort', 'sepa' => 'SEPA Direct Debit', - 'enable_alipay' => 'Accept Alipay', - 'enable_sofort' => 'Accept EU bank transfers', - 'stripe_alipay_help' => 'These gateways also need to be activated in :link.', - 'calendar' => 'Calendar', - 'pro_plan_calendar' => ':link to enable the calendar by joining the Pro Plan', + 'enable_alipay' => 'Принимаем Alipay', + 'enable_sofort' => 'Принимаем переводы банков Европы', + 'stripe_alipay_help' => 'Эти шлюзы также необходимо активировать в :link.', + 'calendar' => 'Календарь', + 'pro_plan_calendar' => ':link активируйте календарь, оформив Pro-подписку', - 'what_are_you_working_on' => 'What are you working on?', - 'time_tracker' => 'Time Tracker', + 'what_are_you_working_on' => 'Над чем Вы работаете?', + 'time_tracker' => 'Тайм-трекер', 'refresh' => 'Refresh', 'filter_sort' => 'Filter/Sort', 'no_description' => 'No Description', @@ -2587,15 +2588,15 @@ $LANG = array( 'one_time_password' => 'One Time Password', 'set_phone_for_two_factor' => 'Set your mobile phone number as a backup to enable.', 'enabled_two_factor' => 'Successfully enabled Two-Factor Authentication', - 'add_product' => 'Add Product', + 'add_product' => 'Добавить товар/услугу', 'email_will_be_sent_on' => 'Note: the email will be sent on :date.', - 'invoice_product' => 'Invoice Product', + 'invoice_product' => 'Выставить счёт на товар/услугу', 'self_host_login' => 'Self-Host Login', 'set_self_hoat_url' => 'Self-Host URL', 'local_storage_required' => 'Error: local storage is not available.', 'your_password_reset_link' => 'Your Password Reset Link', 'subdomain_taken' => 'The subdomain is already in use', - 'client_login' => 'Client Login', + 'client_login' => 'Войти как клиент', 'converted_amount' => 'Converted Amount', 'default' => 'Default', 'shipping_address' => 'Shipping Address', @@ -2635,17 +2636,17 @@ $LANG = array( 'apple_pay_not_supported' => 'Sorry, Apple/Google Pay isn\'t supported by your browser', 'optional_payment_methods' => 'Optional Payment Methods', 'add_subscription' => 'Add Subscription', - 'target_url' => 'Target', + 'target_url' => 'Цель', 'target_url_help' => 'When the selected event occurs the app will post the entity to the target URL.', 'event' => 'Event', - 'subscription_event_1' => 'Created Client', - 'subscription_event_2' => 'Created Invoice', + 'subscription_event_1' => 'Создан Клиент', + 'subscription_event_2' => 'Создан Счёт', 'subscription_event_3' => 'Created Quote', 'subscription_event_4' => 'Created Payment', 'subscription_event_5' => 'Created Vendor', 'subscription_event_6' => 'Updated Quote', 'subscription_event_7' => 'Deleted Quote', - 'subscription_event_8' => 'Updated Invoice', + 'subscription_event_8' => 'Обновил счёт', 'subscription_event_9' => 'Deleted Invoice', 'subscription_event_10' => 'Updated Client', 'subscription_event_11' => 'Deleted Client', @@ -2653,8 +2654,8 @@ $LANG = array( 'subscription_event_13' => 'Updated Vendor', 'subscription_event_14' => 'Deleted Vendor', 'subscription_event_15' => 'Created Expense', - 'subscription_event_16' => 'Updated Expense', - 'subscription_event_17' => 'Deleted Expense', + 'subscription_event_16' => 'Затраты обновлены', + 'subscription_event_17' => 'Удалённые затраты', 'subscription_event_18' => 'Created Task', 'subscription_event_19' => 'Updated Task', 'subscription_event_20' => 'Deleted Task', @@ -2669,10 +2670,10 @@ $LANG = array( 'invoice_project' => 'Invoice Project', 'module_recurring_invoice' => 'Recurring Invoices', 'module_credit' => 'Credits', - 'module_quote' => 'Quotes & Proposals', + 'module_quote' => 'Счета и Коммерческие предложения', 'module_task' => 'Tasks & Projects', - 'module_expense' => 'Expenses & Vendors', - 'module_ticket' => 'Tickets', + 'module_expense' => 'Затраты и Поставщики', + 'module_ticket' => 'Тикеты', 'reminders' => 'Reminders', 'send_client_reminders' => 'Send email reminders', 'can_view_tasks' => 'Tasks are visible in the portal', @@ -2689,22 +2690,22 @@ $LANG = array( 'copy_shipping' => 'Copy Shipping', 'copy_billing' => 'Copy Billing', 'quote_has_expired' => 'The quote has expired, please contact the merchant.', - 'empty_table_footer' => 'Showing 0 to 0 of 0 entries', + 'empty_table_footer' => 'Показано 0 to 0 из 0 записей', 'do_not_trust' => 'Do not remember this device', 'trust_for_30_days' => 'Trust for 30 days', 'trust_forever' => 'Trust forever', 'kanban' => 'Kanban', 'backlog' => 'Backlog', 'ready_to_do' => 'Ready to do', - 'in_progress' => 'In progress', + 'in_progress' => 'В процессе', 'add_status' => 'Add status', 'archive_status' => 'Archive Status', 'new_status' => 'New Status', - 'convert_products' => 'Convert Products', - 'convert_products_help' => 'Automatically convert product prices to the client\'s currency', + 'convert_products' => 'Конвертировать товар/услугу', + 'convert_products_help' => 'Автоматически конвертировать цену продукта в валюту клиента ', 'improve_client_portal_link' => 'Set a subdomain to shorten the client portal link.', 'budgeted_hours' => 'Budgeted Hours', - 'progress' => 'Progress', + 'progress' => 'Прогресс', 'view_project' => 'View Project', 'summary' => 'Summary', 'endless_reminder' => 'Endless Reminder', @@ -2724,8 +2725,8 @@ $LANG = array( 'none' => 'None', 'proposal_message_button' => 'To view your proposal for :amount, click the button below.', 'proposal' => 'Proposal', - 'proposals' => 'Proposals', - 'list_proposals' => 'List Proposals', + 'proposals' => 'Коммерческие предложения', + 'list_proposals' => 'Список Коммерческих предложений', 'new_proposal' => 'New Proposal', 'edit_proposal' => 'Edit Proposal', 'archive_proposal' => 'Archive Proposal', @@ -2754,10 +2755,10 @@ $LANG = array( 'deleted_proposal_snippets' => 'Successfully archived :count snippets', 'restored_proposal_snippet' => 'Successfully restored snippet', 'restore_proposal_snippet' => 'Restore Snippet', - 'template' => 'Template', - 'templates' => 'Templates', - 'proposal_template' => 'Template', - 'proposal_templates' => 'Templates', + 'template' => 'Шаблон', + 'templates' => 'Шаблоны', + 'proposal_template' => 'Шаблон', + 'proposal_templates' => 'Шаблоны', 'new_proposal_template' => 'New Template', 'edit_proposal_template' => 'Edit Template', 'archive_proposal_template' => 'Archive Template', @@ -2770,9 +2771,9 @@ $LANG = array( 'deleted_proposal_templates' => 'Successfully archived :count templates', 'restored_proposal_template' => 'Successfully restored template', 'restore_proposal_template' => 'Restore Template', - 'proposal_category' => 'Category', - 'proposal_categories' => 'Categories', - 'new_proposal_category' => 'New Category', + 'proposal_category' => 'Категория', + 'proposal_categories' => 'Категории', + 'new_proposal_category' => 'Новая категория', 'edit_proposal_category' => 'Edit Category', 'archive_proposal_category' => 'Archive Category', 'delete_proposal_category' => 'Delete Category', @@ -2780,16 +2781,16 @@ $LANG = array( 'updated_proposal_category' => 'Successfully updated category', 'archived_proposal_category' => 'Successfully archived category', 'deleted_proposal_category' => 'Successfully archived category', - 'archived_proposal_categories' => 'Successfully archived :count categories', - 'deleted_proposal_categories' => 'Successfully archived :count categories', + 'archived_proposal_categories' => 'Успешно перемещены в архив :count Категории', + 'deleted_proposal_categories' => 'Успешно перемещены в архив :count Категории', 'restored_proposal_category' => 'Successfully restored category', 'restore_proposal_category' => 'Restore Category', 'delete_status' => 'Delete Status', 'standard' => 'Standard', - 'icon' => 'Icon', + 'icon' => 'Иконка', 'proposal_not_found' => 'The requested proposal is not available', 'create_proposal_category' => 'Create category', - 'clone_proposal_template' => 'Clone Template', + 'clone_proposal_template' => 'Скопировать Шаблон', 'proposal_email' => 'Proposal Email', 'proposal_subject' => 'New proposal :number from :account', 'proposal_message' => 'To view your proposal for :amount, click the link below.', @@ -2809,11 +2810,11 @@ $LANG = array( 'warning_local_refund' => 'The refund will be recorded in the app but will NOT be processed by the payment gateway.', 'email_address_changed' => 'Email address has been changed', 'email_address_changed_message' => 'The email address for your account has been changed from :old_email to :new_email.', - 'test' => 'Test', - 'beta' => 'Beta', + 'test' => 'Тест', + 'beta' => 'Бета', 'gmp_required' => 'Exporting to ZIP requires the GMP extension', - 'email_history' => 'Email History', - 'loading' => 'Loading', + 'email_history' => 'История сообщений', + 'loading' => 'Загружается', 'no_messages_found' => 'No messages found', 'processing' => 'Processing', 'reactivate' => 'Reactivate', @@ -2828,17 +2829,17 @@ $LANG = array( 'platforms' => 'Platforms', 'email_clients' => 'Email Clients', 'mobile' => 'Mobile', - 'desktop' => 'Desktop', + 'desktop' => 'Рабочий стол', 'webmail' => 'Webmail', - 'group' => 'Group', + 'group' => 'Группа', 'subgroup' => 'Subgroup', 'unset' => 'Unset', 'received_new_payment' => 'You\'ve received a new payment!', 'slack_webhook_help' => 'Receive payment notifications using :link.', 'slack_incoming_webhooks' => 'Slack incoming webhooks', - 'accept' => 'Accept', + 'accept' => 'Подтвердить', 'accepted_terms' => 'Successfully accepted the latest terms of service', - 'invalid_url' => 'Invalid URL', + 'invalid_url' => 'Невалидный URL', 'workflow_settings' => 'Workflow Settings', 'auto_email_invoice' => 'Auto Email', 'auto_email_invoice_help' => 'Automatically email recurring invoices when they are created.', @@ -2855,51 +2856,51 @@ $LANG = array( 'client_must_be_active' => 'Error: the client must be active', 'purge_client' => 'Purge Client', 'purged_client' => 'Successfully purged client', - 'purge_client_warning' => 'All related records (invoices, tasks, expenses, documents, etc) will also be deleted.', - 'clone_product' => 'Clone Product', + 'purge_client_warning' => 'Все связанные записи(счета, затраты, документы и.т.д.) также будут удалены.', + 'clone_product' => 'Копировать товар/услугу.', 'item_details' => 'Item Details', 'send_item_details_help' => 'Send line item details to the payment gateway.', 'view_proposal' => 'View Proposal', 'view_in_portal' => 'View in Portal', 'cookie_message' => 'This website uses cookies to ensure you get the best experience on our website.', - 'got_it' => 'Got it!', + 'got_it' => 'Понял!', 'vendor_will_create' => 'vendor will be created', - 'vendors_will_create' => 'vendors will be created', + 'vendors_will_create' => 'Поставщики были созданы', 'created_vendors' => 'Successfully created :count vendor(s)', - 'import_vendors' => 'Import Vendors', - 'company' => 'Company', + 'import_vendors' => 'Импортировать Поставщиков', + 'company' => 'Компания', 'client_field' => 'Client Field', 'contact_field' => 'Contact Field', - 'product_field' => 'Product Field', + 'product_field' => 'Поле товара/услуги', 'task_field' => 'Task Field', 'project_field' => 'Project Field', 'expense_field' => 'Expense Field', - 'vendor_field' => 'Vendor Field', - 'company_field' => 'Company Field', - 'invoice_field' => 'Invoice Field', + 'vendor_field' => 'Поле Поставщика', + 'company_field' => 'Поле Компании', + 'invoice_field' => 'Поле Счёта', 'invoice_surcharge' => 'Invoice Surcharge', 'custom_task_fields_help' => 'Add a field when creating a task.', 'custom_project_fields_help' => 'Add a field when creating a project.', 'custom_expense_fields_help' => 'Add a field when creating an expense.', 'custom_vendor_fields_help' => 'Add a field when creating a vendor.', - 'messages' => 'Messages', + 'messages' => 'Сообщения', 'unpaid_invoice' => 'Unpaid Invoice', - 'paid_invoice' => 'Paid Invoice', + 'paid_invoice' => 'Оплаченные счета', 'unapproved_quote' => 'Unapproved Quote', 'unapproved_proposal' => 'Unapproved Proposal', 'autofills_city_state' => 'Auto-fills city/state', - 'no_match_found' => 'No match found', - 'password_strength' => 'Password Strength', - 'strength_weak' => 'Weak', - 'strength_good' => 'Good', - 'strength_strong' => 'Strong', + 'no_match_found' => 'Совпадений не найдено', + 'password_strength' => 'Сложность пароля', + 'strength_weak' => 'Слыбый', + 'strength_good' => 'Хороший', + 'strength_strong' => 'Сильный', 'mark' => 'Mark', 'updated_task_status' => 'Successfully update task status', - 'background_image' => 'Background Image', + 'background_image' => 'Фоновое изображение', 'background_image_help' => 'Use the :link to manage your images, we recommend using a small file.', 'proposal_editor' => 'proposal editor', 'background' => 'Background', - 'guide' => 'Guide', + 'guide' => 'Руководство', 'gateway_fee_item' => 'Gateway Fee Item', 'gateway_fee_description' => 'Gateway Fee Surcharge', 'gateway_fee_discount_description' => 'Gateway Fee Discount', @@ -2908,36 +2909,36 @@ $LANG = array( 'reference' => 'Reference', 'amount_paid' => 'Amount Paid', 'send_notifications_for' => 'Send Notifications For', - 'all_invoices' => 'All Invoices', - 'my_invoices' => 'My Invoices', + 'all_invoices' => 'Все счета', + 'my_invoices' => 'Мои Счета', 'payment_reference' => 'Payment Reference', - 'maximum' => 'Maximum', - 'sort' => 'Sort', + 'maximum' => 'Максимум', + 'sort' => 'Сортировка', 'refresh_complete' => 'Refresh Complete', 'please_enter_your_email' => 'Please enter your email', 'please_enter_your_password' => 'Please enter your password', 'please_enter_your_url' => 'Please enter your URL', - 'please_enter_a_product_key' => 'Please enter a product key', + 'please_enter_a_product_key' => 'Пожалуйста, введите код товара/услуги', 'an_error_occurred' => 'An error occurred', 'overview' => 'Overview', 'copied_to_clipboard' => 'Copied :value to the clipboard', - 'error' => 'Error', + 'error' => 'Ошибка', 'could_not_launch' => 'Could not launch', 'additional' => 'Additional', 'ok' => 'Ok', 'email_is_invalid' => 'Email is invalid', 'items' => 'Items', - 'partial_deposit' => 'Partial/Deposit', + 'partial_deposit' => 'Частичная оплата', 'add_item' => 'Add Item', 'total_amount' => 'Total Amount', 'pdf' => 'PDF', - 'invoice_status_id' => 'Invoice Status', + 'invoice_status_id' => 'Статус Счёта', 'click_plus_to_add_item' => 'Click + to add an item', 'count_selected' => ':count selected', 'dismiss' => 'Dismiss', - 'please_select_a_date' => 'Please select a date', - 'please_select_a_client' => 'Please select a client', - 'language' => 'Language', + 'please_select_a_date' => 'Пожалуйста, выбирите дату', + 'please_select_a_client' => 'Пожалуйста, выбирите клиента', + 'language' => 'Язык', 'updated_at' => 'Updated', 'please_enter_an_invoice_number' => 'Please enter an invoice number', 'please_enter_a_quote_number' => 'Please enter a quote number', @@ -2953,11 +2954,11 @@ $LANG = array( 'marked_invoice_as_sent' => 'Successfully marked invoice as sent', 'please_enter_a_client_or_contact_name' => 'Please enter a client or contact name', 'restart_app_to_apply_change' => 'Restart the app to apply the change', - 'refresh_data' => 'Refresh Data', + 'refresh_data' => 'Обновить Данные', 'blank_contact' => 'Blank Contact', 'no_records_found' => 'No records found', 'industry' => 'Industry', - 'size' => 'Size', + 'size' => 'Размер', 'net' => 'Net', 'show_tasks' => 'Show tasks', 'email_reminders' => 'Email Reminders', @@ -2966,14 +2967,14 @@ $LANG = array( 'reminder3' => 'Third Reminder', 'send' => 'Send', 'auto_billing' => 'Auto billing', - 'button' => 'Button', + 'button' => 'Кнопка', 'more' => 'More', 'edit_recurring_invoice' => 'Edit Recurring Invoice', 'edit_recurring_quote' => 'Edit Recurring Quote', 'quote_status' => 'Quote Status', 'please_select_an_invoice' => 'Please select an invoice', 'filtered_by' => 'Filtered by', - 'payment_status' => 'Payment Status', + 'payment_status' => 'Статус Платежа', 'payment_status_1' => 'Pending', 'payment_status_2' => 'Voided', 'payment_status_3' => 'Failed', @@ -2984,80 +2985,80 @@ $LANG = array( 'refunded' => 'Refunded', 'marked_quote_as_sent' => 'Successfully marked quote as sent', 'custom_module_settings' => 'Custom Module Settings', - 'ticket' => 'Ticket', - 'tickets' => 'Tickets', + 'ticket' => 'Тикет', + 'tickets' => 'Тикеты', 'ticket_number' => 'Ticket #', 'new_ticket' => 'New Ticket', 'edit_ticket' => 'Edit Ticket', - 'view_ticket' => 'View Ticket', - 'archive_ticket' => 'Archive Ticket', - 'restore_ticket' => 'Restore Ticket', - 'delete_ticket' => 'Delete Ticket', + 'view_ticket' => 'Посмотреть Тикет', + 'archive_ticket' => 'Архивировать Тикет', + 'restore_ticket' => 'Восстановить Тикет', + 'delete_ticket' => 'Удалить Тикет', 'archived_ticket' => 'Successfully archived ticket', 'archived_tickets' => 'Successfully archived tickets', 'restored_ticket' => 'Successfully restored ticket', 'deleted_ticket' => 'Successfully deleted ticket', - 'open' => 'Open', - 'new' => 'New', - 'closed' => 'Closed', - 'reopened' => 'Reopened', - 'priority' => 'Priority', - 'last_updated' => 'Last Updated', - 'comment' => 'Comments', - 'tags' => 'Tags', - 'linked_objects' => 'Linked Objects', - 'low' => 'Low', - 'medium' => 'Medium', - 'high' => 'High', + 'open' => 'Открыт', + 'new' => 'Новый', + 'closed' => 'Закрыт', + 'reopened' => 'Открыт заново', + 'priority' => 'Приоритет', + 'last_updated' => 'Последнее обновление', + 'comment' => 'Комментарии', + 'tags' => 'Тэги', + 'linked_objects' => 'Связанный объекты', + 'low' => 'Низкий', + 'medium' => 'Средний', + 'high' => 'Высокий', 'no_due_date' => 'No due date set', - 'assigned_to' => 'Assigned to', - 'reply' => 'Reply', - 'awaiting_reply' => 'Awaiting reply', - 'ticket_close' => 'Close Ticket', - 'ticket_reopen' => 'Reopen Ticket', - 'ticket_open' => 'Open Ticket', - 'ticket_split' => 'Split Ticket', - 'ticket_merge' => 'Merge Ticket', - 'ticket_update' => 'Update Ticket', - 'ticket_settings' => 'Ticket Settings', - 'updated_ticket' => 'Ticket Updated', - 'mark_spam' => 'Mark as Spam', + 'assigned_to' => 'Назначен', + 'reply' => 'Ответ', + 'awaiting_reply' => 'В ожидании ответа', + 'ticket_close' => 'Закрыть Тикет', + 'ticket_reopen' => 'Открыть Тикет заново', + 'ticket_open' => 'Открыть Тикет', + 'ticket_split' => 'Разделить Тикет', + 'ticket_merge' => 'Объединить Тикет', + 'ticket_update' => 'Обновить Тикет', + 'ticket_settings' => 'Настройки тикета', + 'updated_ticket' => 'Тикет обновлён', + 'mark_spam' => 'Пометить как спам', 'local_part' => 'Local Part', 'local_part_unavailable' => 'Name taken', 'local_part_available' => 'Name available', 'local_part_invalid' => 'Invalid name (alpha numeric only, no spaces', 'local_part_help' => 'Customize the local part of your inbound support email, ie. YOUR_NAME@support.invoiceninja.com', 'from_name_help' => 'From name is the recognizable sender which is displayed instead of the email address, ie Support Center', - 'local_part_placeholder' => 'YOUR_NAME', - 'from_name_placeholder' => 'Support Center', - 'attachments' => 'Attachments', - 'client_upload' => 'Client uploads', + 'local_part_placeholder' => 'ВАШЕ_ИМЯ', + 'from_name_placeholder' => 'Центр Поддержки', + 'attachments' => 'Прикреплённый файлы', + 'client_upload' => 'Загрузки Клиента', 'enable_client_upload_help' => 'Allow clients to upload documents/attachments', 'max_file_size_help' => 'Maximum file size (KB) is limited by your post_max_size and upload_max_filesize variables as set in your PHP.INI', - 'max_file_size' => 'Maximum file size', + 'max_file_size' => 'Максимальный размер файла', 'mime_types' => 'Mime types', 'mime_types_placeholder' => '.pdf , .docx, .jpg', 'mime_types_help' => 'Comma separated list of allowed mime types, leave blank for all', 'ticket_number_start_help' => 'Ticket number must be greater than the current ticket number', - 'new_ticket_template_id' => 'New ticket', + 'new_ticket_template_id' => 'Новый тикет', 'new_ticket_autoresponder_help' => 'Selecting a template will send an auto response to a client/contact when a new ticket is created', 'update_ticket_template_id' => 'Updated ticket', 'update_ticket_autoresponder_help' => 'Selecting a template will send an auto response to a client/contact when a ticket is updated', - 'close_ticket_template_id' => 'Closed ticket', + 'close_ticket_template_id' => 'закрытый тикет', 'close_ticket_autoresponder_help' => 'Selecting a template will send an auto response to a client/contact when a ticket is closed', - 'default_priority' => 'Default priority', - 'alert_new_comment_id' => 'New comment', + 'default_priority' => 'ПРиоритет по-умолчанию', + 'alert_new_comment_id' => 'Новый комментарий', 'alert_comment_ticket_help' => 'Selecting a template will send a notification (to agent) when a comment is made.', 'alert_comment_ticket_email_help' => 'Comma separated emails to bcc on new comment.', 'new_ticket_notification_list' => 'Additional new ticket notifications', 'update_ticket_notification_list' => 'Additional new comment notifications', - 'comma_separated_values' => 'admin@example.com, supervisor@example.com', + 'comma_separated_values' => 'admin@example.ru, supervisor@example.ru', 'alert_ticket_assign_agent_id' => 'Ticket assignment', 'alert_ticket_assign_agent_id_hel' => 'Selecting a template will send a notification (to agent) when a ticket is assigned.', 'alert_ticket_assign_agent_id_notifications' => 'Additional ticket assigned notifications', 'alert_ticket_assign_agent_id_help' => 'Comma separated emails to bcc on ticket assignment.', 'alert_ticket_transfer_email_help' => 'Comma separated emails to bcc on ticket transfer.', - 'alert_ticket_overdue_agent_id' => 'Ticket overdue', + 'alert_ticket_overdue_agent_id' => 'Тикет просрочен', 'alert_ticket_overdue_email' => 'Additional overdue ticket notifications', 'alert_ticket_overdue_email_help' => 'Comma separated emails to bcc on ticket overdue.', 'alert_ticket_overdue_agent_id_help' => 'Selecting a template will send a notification (to agent) when a ticket becomes overdue.', @@ -3066,23 +3067,23 @@ $LANG = array( 'default_agent' => 'Default Agent', 'default_agent_help' => 'If selected will automatically be assigned to all inbound tickets', 'show_agent_details' => 'Show agent details on responses', - 'avatar' => 'Avatar', - 'remove_avatar' => 'Remove avatar', - 'ticket_not_found' => 'Ticket not found', - 'add_template' => 'Add Template', - 'ticket_template' => 'Ticket Template', - 'ticket_templates' => 'Ticket Templates', + 'avatar' => 'Аватар', + 'remove_avatar' => 'Удалить аватар', + 'ticket_not_found' => 'Тикет не найден', + 'add_template' => 'Добавить Шаблон', + 'ticket_template' => 'Шаблон Тикета', + 'ticket_templates' => 'Шаблоны Тикетов', 'updated_ticket_template' => 'Updated Ticket Template', 'created_ticket_template' => 'Created Ticket Template', - 'archive_ticket_template' => 'Archive Template', - 'restore_ticket_template' => 'Restore Template', + 'archive_ticket_template' => 'Архивировать шаблон', + 'restore_ticket_template' => 'Восстановить шаблон', 'archived_ticket_template' => 'Successfully archived template', 'restored_ticket_template' => 'Successfully restored template', 'close_reason' => 'Let us know why you are closing this ticket', 'reopen_reason' => 'Let us know why you are reopening this ticket', - 'enter_ticket_message' => 'Please enter a message to update the ticket', - 'show_hide_all' => 'Show / Hide all', - 'subject_required' => 'Subject required', + 'enter_ticket_message' => 'Пожалуйста, введите сообщение для того чтобы обновить тикет', + 'show_hide_all' => 'Показать / Скрыть всё', + 'subject_required' => 'Требуется ввести Тему', 'mobile_refresh_warning' => 'If you\'re using the mobile app you may need to do a full refresh.', 'enable_proposals_for_background' => 'To upload a background image :link to enable the proposals module.', 'ticket_assignment' => 'Ticket :ticket_number has been assigned to :agent', @@ -3091,57 +3092,57 @@ $LANG = array( 'ticket_updated_template_subject' => 'Ticket :ticket_number has been updated.', 'ticket_closed_template_subject' => 'Ticket :ticket_number has been closed.', 'ticket_overdue_template_subject' => 'Ticket :ticket_number is now overdue', - 'merge' => 'Merge', - 'merged' => 'Merged', - 'agent' => 'Agent', - 'parent_ticket' => 'Parent Ticket', - 'linked_tickets' => 'Linked Tickets', + 'merge' => 'Объединить', + 'merged' => 'Обединён', + 'agent' => 'Агент', + 'parent_ticket' => 'Родительский Тикет', + 'linked_tickets' => 'Связзвнные тикеты', 'merge_prompt' => 'Enter ticket number to merge into', 'merge_from_to' => 'Ticket #:old_ticket merged into Ticket #:new_ticket', 'merge_closed_ticket_text' => 'Ticket #:old_ticket was closed and merged into Ticket#:new_ticket - :subject', 'merge_updated_ticket_text' => 'Ticket #:old_ticket was closed and merged into this ticket', 'merge_placeholder' => 'Merge ticket #:ticket into the following ticket', - 'select_ticket' => 'Select Ticket', - 'new_internal_ticket' => 'New internal ticket', - 'internal_ticket' => 'Internal ticket', - 'create_ticket' => 'Create ticket', + 'select_ticket' => 'Выбирите тикет', + 'new_internal_ticket' => 'Новый внутренний тикет', + 'internal_ticket' => 'Внутренний тикет', + 'create_ticket' => 'Создать Тикет', 'allow_inbound_email_tickets_external' => 'New Tickets by email (Client)', 'allow_inbound_email_tickets_external_help' => 'Allow clients to create new tickets by email', 'include_in_filter' => 'Include in filter', 'custom_client1' => ':VALUE', 'custom_client2' => ':VALUE', - 'compare' => 'Compare', + 'compare' => 'Сравнить', 'hosted_login' => 'Hosted Login', 'selfhost_login' => 'Selfhost Login', - 'google_login' => 'Google Login', + 'google_login' => 'Авторизация с помощью Google', 'thanks_for_patience' => 'Thank for your patience while we work to implement these features.\n\nWe hope to have them completed in the next few months.\n\nUntil then we\'ll continue to support the', - 'legacy_mobile_app' => 'legacy mobile app', - 'today' => 'Today', - 'current' => 'Current', - 'previous' => 'Previous', - 'current_period' => 'Current Period', - 'comparison_period' => 'Comparison Period', - 'previous_period' => 'Previous Period', - 'previous_year' => 'Previous Year', - 'compare_to' => 'Compare to', - 'last_week' => 'Last Week', - 'clone_to_invoice' => 'Clone to Invoice', - 'clone_to_quote' => 'Clone to Quote', - 'convert' => 'Convert', - 'last7_days' => 'Last 7 Days', - 'last30_days' => 'Last 30 Days', - 'custom_js' => 'Custom JS', + 'legacy_mobile_app' => 'устаревшее мобильное приложение', + 'today' => 'Сегодня', + 'current' => 'Текущий', + 'previous' => 'Предыдущий', + 'current_period' => 'Текущий период', + 'comparison_period' => 'Период сравнения', + 'previous_period' => 'Прошлый период', + 'previous_year' => 'Преддуший год', + 'compare_to' => 'Сравнить с', + 'last_week' => 'За последнюю неделю', + 'clone_to_invoice' => 'Добавить в счёт', + 'clone_to_quote' => 'Добавить в Прайс-лист', + 'convert' => 'Конвертирован', + 'last7_days' => 'Последние 7 дней', + 'last30_days' => 'Последние 30 дней', + 'custom_js' => 'Свой JS', 'adjust_fee_percent_help' => 'Adjust percent to account for fee', - 'show_product_notes' => 'Show product details', + 'show_product_notes' => 'Показать детали товара/услуги', 'show_product_notes_help' => 'Include the description and cost in the product dropdown', - 'important' => 'Important', - 'thank_you_for_using_our_app' => 'Thank you for using our app!', + 'important' => 'Важно', + 'thank_you_for_using_our_app' => 'Спасибо что используете наше приложение!', 'if_you_like_it' => 'If you like it please', 'to_rate_it' => 'to rate it.', 'average' => 'Average', - 'unapproved' => 'Unapproved', + 'unapproved' => 'Неподтверждённые', 'authenticate_to_change_setting' => 'Please authenticate to change this setting', - 'locked' => 'Locked', + 'locked' => 'Заблокировано', 'authenticate' => 'Authenticate', 'please_authenticate' => 'Please authenticate', 'biometric_authentication' => 'Biometric Authentication', @@ -3449,10 +3450,10 @@ $LANG = array( 'client_country' => 'Client Country', 'client_is_active' => 'Client is Active', 'client_balance' => 'Client Balance', - 'client_address1' => 'Client Address 1', - 'client_address2' => 'Client Address 2', - 'client_shipping_address1' => 'Client Shipping Address 1', - 'client_shipping_address2' => 'Client Shipping Address 2', + 'client_address1' => 'Client Street', + 'client_address2' => 'Client Apt/Suite', + 'client_shipping_address1' => 'Client Shipping Street', + 'client_shipping_address2' => 'Client Shipping Apt/Suite', 'tax_rate1' => 'Tax Rate 1', 'tax_rate2' => 'Tax Rate 2', 'tax_rate3' => 'Tax Rate 3', @@ -3532,8 +3533,8 @@ $LANG = array( 'marked_credit_as_sent' => 'Successfully marked credit as sent', 'email_subject_payment_partial' => 'Email Partial Payment Subject', 'is_approved' => 'Is Approved', - 'migration_went_wrong' => 'Oops, something went wrong! Make sure you did proper setup with V2 of Invoice Ninja, before starting migration.', - 'cross_migration_message' => 'Cross account migration is not allowed. Please read more about it here: https://invoiceninja.github.io/cross-site-migration.html', + 'migration_went_wrong' => 'Oops, something went wrong! Please make sure you have setup an Invoice Ninja v5 instance before starting the migration.', + 'cross_migration_message' => 'Cross account migration is not allowed. Please read more about it here: https://invoiceninja.github.io/docs/migration/#troubleshooting', 'email_credit' => 'Email Credit', 'client_email_not_set' => 'Client does not have an email address set', 'ledger' => 'Ledger', @@ -3912,7 +3913,7 @@ $LANG = array( 'show' => 'Show', 'empty_columns' => 'Empty Columns', 'project_name' => 'Project Name', - 'counter_pattern_error' => 'To use :client_counter please add either :number or :id_number to prevent conflicts', + 'counter_pattern_error' => 'To use :client_counter please add either :client_number or :client_id_number to prevent conflicts', 'this_quarter' => 'This Quarter', 'to_update_run' => 'To update run', 'registration_url' => 'Registration URL', @@ -3968,8 +3969,8 @@ $LANG = array( 'list_of_recurring_invoices' => 'List of recurring invoices', 'details_of_recurring_invoice' => 'Here are some details about recurring invoice', 'cancellation' => 'Cancellation', - 'about_cancellation' => 'In case you want to stop the recurring invoice, please click the request the cancellation.', - 'cancellation_warning' => 'Warning! You are requesting a cancellation of this service. Your service may be cancelled with no further notification to you.', + 'about_cancellation' => 'In case you want to stop the recurring invoice,\n please click the request the cancellation.', + 'cancellation_warning' => 'Warning! You are requesting a cancellation of this service.\n Your service may be cancelled with no further notification to you.', 'cancellation_pending' => 'Cancellation pending, we\'ll be in touch!', 'list_of_payments' => 'List of payments', 'payment_details' => 'Details of the payment', @@ -4135,19 +4136,26 @@ $LANG = array( 'payment_message_extended' => 'Thank you for your payment of :amount for :invoice', 'online_payments_minimum_note' => 'Note: Online payments are supported only if amount is bigger than $1 or currency equivalent.', 'payment_token_not_found' => 'Payment token not found, please try again. If an issue still persist, try with another payment method', - - ///////////////////////////////////////////////// + 'vendor_address1' => 'Vendor Street', + 'vendor_address2' => 'Vendor Apt/Suite', + 'partially_unapplied' => 'Partially Unapplied', + 'select_a_gmail_user' => 'Please select a user authenticated with Gmail', + 'list_long_press' => 'List Long Press', + 'show_actions' => 'Show Actions', + 'start_multiselect' => 'Start Multiselect', + 'email_sent_to_confirm_email' => 'An email has been sent to confirm the email address', + 'converted_paid_to_date' => 'Converted Paid to Date', + 'converted_credit_balance' => 'Converted Credit Balance', + 'converted_total' => 'Converted Total', + 'reply_to_name' => 'Reply-To Name', + 'payment_status_-2' => 'Partially Unapplied', + 'color_theme' => 'Color Theme', 'start_migration' => 'Start Migration', 'recurring_cancellation_request' => 'Request for recurring invoice cancellation from :contact', 'recurring_cancellation_request_body' => ':contact from Client :client requested to cancel Recurring Invoice :invoice', 'hello' => 'Hello', 'group_documents' => 'Group documents', 'quote_approval_confirmation_label' => 'Are you sure you want to approve this quote?', - - 'click_agree_to_accept_terms' => 'Click "Agree" to Accept Terms.', - 'agree' => 'Agree', - - 'pending_approval' => 'Pending Approval', 'migration_select_company_label' => 'Select companies to migrate', 'force_migration' => 'Force migration', 'require_password_with_social_login' => 'Require Password with Social Login', @@ -4167,6 +4175,30 @@ $LANG = array( 'zoho' => 'Zoho', 'accounting' => 'Accounting', 'required_files_missing' => 'Please provide all CSVs.', + 'use_last_email' => 'Use last email', + 'activate_company' => 'Activate Company', + 'activate_company_help' => 'Enable emails, recurring invoices and notifications', + 'an_error_occurred_try_again' => 'An error occurred, please try again', + 'please_first_set_a_password' => 'Please first set a password', + 'changing_phone_disables_two_factor' => 'Warning: Changing your phone number will disable 2FA', + 'help_translate' => 'Help Translate', + 'please_select_a_country' => 'Please select a country', + 'disabled_two_factor' => 'Successfully disabled 2FA', + 'connected_google' => 'Successfully connected account', + 'disconnected_google' => 'Successfully disconnected account', + 'delivered' => 'Delivered', + 'spam' => 'Spam', + 'view_docs' => 'View Docs', + 'enter_phone_to_enable_two_factor' => 'Please provide a mobile phone number to enable two factor authentication', + 'send_sms' => 'Send SMS', + 'sms_code' => 'SMS Code', + 'connect_google' => 'Connect Google', + 'disconnect_google' => 'Disconnect Google', + 'disable_two_factor' => 'Disable Two Factor', + 'invoice_task_datelog' => 'Invoice Task Datelog', + 'invoice_task_datelog_help' => 'Add date details to the invoice line items', + 'lang_Russian' => 'Russian', + ); return $LANG; diff --git a/routes/api.php b/routes/api.php index d34fa8199c..649e59ed85 100644 --- a/routes/api.php +++ b/routes/api.php @@ -37,6 +37,8 @@ Route::group(['middleware' => ['api_db', 'token_auth', 'locale'], 'prefix' => 'a Route::put('clients/{client}/upload', 'ClientController@upload')->name('clients.upload'); Route::post('clients/bulk', 'ClientController@bulk')->name('clients.bulk'); + Route::resource('client_gateway_tokens', 'ClientGatewayTokenController'); + Route::post('connected_account', 'ConnectedAccountController@index'); Route::post('connected_account/gmail', 'ConnectedAccountController@handleGmailOauth'); diff --git a/tests/Feature/ClientGatewayTokenApiTest.php b/tests/Feature/ClientGatewayTokenApiTest.php new file mode 100644 index 0000000000..4751b9c8f4 --- /dev/null +++ b/tests/Feature/ClientGatewayTokenApiTest.php @@ -0,0 +1,181 @@ +withoutMiddleware( + ThrottleRequests::class + ); + + if (! config('ninja.testvars.stripe')) { + $this->markTestSkipped('Skip test no company gateways installed'); + } + + $this->faker = \Faker\Factory::create(); + + Model::reguard(); + + $this->makeTestData(); + + $this->withoutExceptionHandling(); + + CompanyGateway::whereNotNull('id')->delete(); + + $data = []; + $data[1]['min_limit'] = -1; + $data[1]['max_limit'] = -1; + $data[1]['fee_amount'] = 0.00; + $data[1]['fee_percent'] = 2; + $data[1]['fee_tax_name1'] = 'GST'; + $data[1]['fee_tax_rate1'] = 10; + $data[1]['fee_tax_name2'] = 'GST'; + $data[1]['fee_tax_rate2'] = 10; + $data[1]['fee_tax_name3'] = 'GST'; + $data[1]['fee_tax_rate3'] = 10; + $data[1]['adjust_fee_percent'] = true; + $data[1]['fee_cap'] = 0; + $data[1]['is_enabled'] = true; + + $data[2]['min_limit'] = -1; + $data[2]['max_limit'] = -1; + $data[2]['fee_amount'] = 0.00; + $data[2]['fee_percent'] = 1; + $data[2]['fee_tax_name1'] = 'GST'; + $data[2]['fee_tax_rate1'] = 10; + $data[2]['fee_tax_name2'] = 'GST'; + $data[2]['fee_tax_rate2'] = 10; + $data[2]['fee_tax_name3'] = 'GST'; + $data[2]['fee_tax_rate3'] = 10; + $data[2]['adjust_fee_percent'] = true; + $data[2]['fee_cap'] = 0; + $data[2]['is_enabled'] = true; + + //disable ach here + $json_config = json_decode(config('ninja.testvars.stripe')); + + $this->cg = new CompanyGateway; + $this->cg->company_id = $this->company->id; + $this->cg->user_id = $this->user->id; + $this->cg->gateway_key = 'd14dd26a37cecc30fdd65700bfb55b23'; + $this->cg->require_cvv = true; + $this->cg->require_billing_address = true; + $this->cg->require_shipping_address = true; + $this->cg->update_details = true; + $this->cg->config = encrypt(json_encode($json_config)); + $this->cg->fees_and_limits = $data; + $this->cg->save(); + } + + public function testClientGatewayPostPost() + { + $data = [ + 'client_id' => $this->client->hashed_id, + 'company_gateway_id' => $this->cg->hashed_id, + 'gateway_type_id' => GatewayType::CREDIT_CARD, + 'meta' => '{}', + ]; + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->post('/api/v1/client_gateway_tokens', $data); + + $response->assertStatus(200); + $arr = $response->json(); + + $this->assertNotNull($arr['data']['token']); + + } + + public function testClientPut() + { + + + $data = [ + 'client_id' => $this->client->hashed_id, + 'company_gateway_id' => $this->cg->hashed_id, + 'gateway_type_id' => GatewayType::CREDIT_CARD, + 'meta' => '{}', + ]; + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->post('/api/v1/client_gateway_tokens', $data); + + $arr = $response->json(); + + $response->assertStatus(200); + + $data = [ + 'token' => 'a_testy_token', + ]; + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->put('/api/v1/client_gateway_tokens/'.$arr['data']['id'], $data); + + $response->assertStatus(200); + + $arr = $response->json(); + + $this->assertEquals('a_testy_token', $arr['data']['token']); + } + + public function testClientGet() + { + + $data = [ + 'client_id' => $this->client->hashed_id, + 'company_gateway_id' => $this->cg->hashed_id, + 'gateway_type_id' => GatewayType::CREDIT_CARD, + 'meta' => '{}', + ]; + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->post('/api/v1/client_gateway_tokens', $data); + + $arr = $response->json(); + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->get('/api/v1/client_gateway_tokens/'.$arr['data']['id']); + + $response->assertStatus(200); + } + +}