diff --git a/app/Events/Invoice/InvoiceReminderWasEmailed.php b/app/Events/Invoice/InvoiceReminderWasEmailed.php index 4eec242ee0a6..3a2106f7de86 100644 --- a/app/Events/Invoice/InvoiceReminderWasEmailed.php +++ b/app/Events/Invoice/InvoiceReminderWasEmailed.php @@ -22,7 +22,7 @@ class InvoiceReminderWasEmailed { use SerializesModels; - public function __construct(public InvoiceInvitation $invitation, public Company $company, public array $event_vars, public int $reminder) + public function __construct(public InvoiceInvitation $invitation, public Company $company, public array $event_vars, public string $template) { } } diff --git a/app/Filters/ClientFilters.php b/app/Filters/ClientFilters.php index 5fae1e910955..19642f1c259b 100644 --- a/app/Filters/ClientFilters.php +++ b/app/Filters/ClientFilters.php @@ -18,6 +18,7 @@ use Illuminate\Database\Eloquent\Builder; */ class ClientFilters extends QueryFilters { + /** * Filter by name. * diff --git a/app/Filters/QueryFilters.php b/app/Filters/QueryFilters.php index 818af708a52c..e207a8052264 100644 --- a/app/Filters/QueryFilters.php +++ b/app/Filters/QueryFilters.php @@ -293,8 +293,16 @@ abstract class QueryFilters return $this->builder; } - public function with(string $value): Builder + public function with(string $value = ''): Builder { + if (strlen($value) == 0) { + return $this->builder; + } + + if($this->with_property == 'id') { + $value = $this->decodePrimaryKey($value); + } + return $this->builder ->orWhere($this->with_property, $value) ->orderByRaw("{$this->with_property} = ? DESC", [$value]) diff --git a/app/Http/Controllers/BankIntegrationController.php b/app/Http/Controllers/BankIntegrationController.php index 7a54fc5dae94..f7b706e9317a 100644 --- a/app/Http/Controllers/BankIntegrationController.php +++ b/app/Http/Controllers/BankIntegrationController.php @@ -48,48 +48,8 @@ class BankIntegrationController extends BaseController } /** - * @OA\Get( - * path="/api/v1/bank_integrations", - * operationId="getBankIntegrations", - * tags={"bank_integrations"}, - * summary="Gets a list of bank_integrations", - * description="Lists all bank integrations", - * @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\Parameter( - * name="rows", - * in="query", - * description="The number of bank integrations to return", - * example="50", - * required=false, - * @OA\Schema( - * type="number", - * format="integer", - * ), - * ), - * @OA\Response( - * response=200, - * description="A list of bank integrations", - * @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/BankIntegration"), - * ), - * @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 Request $request - * @return Response|mixed + * @param BankIntegrationFilters $filters + * @return Responsec */ public function index(BankIntegrationFilters $filters) { @@ -105,47 +65,6 @@ class BankIntegrationController extends BaseController * @param BankIntegration $bank_integration * @return Response * - * - * @OA\Get( - * path="/api/v1/bank_integrations/{id}", - * operationId="showBankIntegration", - * tags={"bank_integrations"}, - * summary="Shows a bank_integration", - * description="Displays a bank_integration by id", - * @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 BankIntegration Hashed ID", - * example="D2J234DFA", - * required=true, - * @OA\Schema( - * type="string", - * format="string", - * ), - * ), - * @OA\Response( - * response=200, - * description="Returns the bank_integration 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/BankIntegration"), - * ), - * @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(ShowBankIntegrationRequest $request, BankIntegration $bank_integration) { @@ -160,47 +79,6 @@ class BankIntegrationController extends BaseController * @param BankIntegration $bank_integration * @return Response * - * - * @OA\Get( - * path="/api/v1/bank_integrations/{id}/edit", - * operationId="editBankIntegration", - * tags={"bank_integrations"}, - * summary="Shows a bank_integration for editing", - * description="Displays a bank_integration by id", - * @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 BankIntegration Hashed ID", - * example="D2J234DFA", - * required=true, - * @OA\Schema( - * type="string", - * format="string", - * ), - * ), - * @OA\Response( - * response=200, - * description="Returns the bank_integration 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/BankIntegration"), - * ), - * @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(EditBankIntegrationRequest $request, BankIntegration $bank_integration) { @@ -214,48 +92,6 @@ class BankIntegrationController extends BaseController * @param BankIntegration $bank_integration * @return Response * - * - * - * @OA\Put( - * path="/api/v1/bank_integrations/{id}", - * operationId="updateBankIntegration", - * tags={"bank_integrations"}, - * summary="Updates a bank_integration", - * description="Handles the updating of a bank_integration by id", - * @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 BankIntegration Hashed ID", - * example="D2J234DFA", - * required=true, - * @OA\Schema( - * type="string", - * format="string", - * ), - * ), - * @OA\Response( - * response=200, - * description="Returns the bank_integration 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/BankIntegration"), - * ), - * @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(UpdateBankIntegrationRequest $request, BankIntegration $bank_integration) { @@ -271,41 +107,15 @@ class BankIntegrationController extends BaseController * @param CreateBankIntegrationRequest $request * @return Response * - * - * - * @OA\Get( - * path="/api/v1/bank_integrations/create", - * operationId="getBankIntegrationsCreate", - * tags={"bank_integrations"}, - * summary="Gets a new blank bank_integration object", - * description="Returns a blank object with default values", - * @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 bank_integration 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/BankIntegration"), - * ), - * @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(CreateBankIntegrationRequest $request) { - $bank_integration = BankIntegrationFactory::create(auth()->user()->company()->id, auth()->user()->id, auth()->user()->account_id); + + /** @var \App\Models\User $user */ + $user = auth()->user(); + + $bank_integration = BankIntegrationFactory::create($user->company()->id, $user->id, $user->account_id); return $this->itemResponse($bank_integration); } @@ -316,42 +126,15 @@ class BankIntegrationController extends BaseController * @param StoreBankIntegrationRequest $request * @return Response * - * - * - * @OA\Post( - * path="/api/v1/bank_integrations", - * operationId="storeBankIntegration", - * tags={"bank_integrations"}, - * summary="Adds a bank_integration", - * description="Adds an bank_integration to a company", - * @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 bank_integration 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/BankIntegration"), - * ), - * @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(StoreBankIntegrationRequest $request) { + + /** @var \App\Models\User $user */ + $user = auth()->user(); + //stub to store the model - $bank_integration = $this->bank_integration_repo->save($request->all(), BankIntegrationFactory::create(auth()->user()->company()->id, auth()->user()->id, auth()->user()->account_id)); + $bank_integration = $this->bank_integration_repo->save($request->all(), BankIntegrationFactory::create($user->company()->id, $user->id, $user->account_id)); return $this->itemResponse($bank_integration); } @@ -363,47 +146,7 @@ class BankIntegrationController extends BaseController * @param BankIntegration $bank_integration * @return Response * - * * @throws \Exception - * @OA\Delete( - * path="/api/v1/bank_integrations/{id}", - * operationId="deleteBankIntegration", - * tags={"bank_integrations"}, - * summary="Deletes a bank_integration", - * description="Handles the deletion of a bank_integration by id", - * @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 BankIntegration 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(DestroyBankIntegrationRequest $request, BankIntegration $bank_integration) { @@ -418,49 +161,6 @@ class BankIntegrationController extends BaseController * * @return Collection * - * @OA\Post( - * path="/api/v1/bank_integrations/bulk", - * operationId="bulkBankIntegrations", - * tags={"bank_integrations"}, - * summary="Performs bulk actions on an array of bank_integrations", - * description="", - * @OA\Parameter(ref="#/components/parameters/X-API-TOKEN"), - * @OA\Parameter(ref="#/components/parameters/X-Requested-With"), - * @OA\Parameter(ref="#/components/parameters/index"), - * @OA\RequestBody( - * description="Action paramters", - * required=true, - * @OA\MediaType( - * mediaType="application/json", - * @OA\Schema( - * type="array", - * @OA\Items( - * type="integer", - * description="Array of hashed IDs to be bulk 'actioned", - * example="[0,1,2,3]", - * ), - * ) - * ) - * ), - * @OA\Response( - * response=200, - * description="The Bulk Action response", - * @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 bulk(BulkBankIntegrationRequest $request) { @@ -485,43 +185,19 @@ class BankIntegrationController extends BaseController * Return the remote list of accounts stored on the third party provider. * * @return Response - * - * @OA\Post( - * path="/api/v1/bank_integrations/refresh_accounts", - * operationId="getRefreshAccounts", - * tags={"bank_integrations"}, - * summary="Gets the list of accounts from the remote server", - * description="Adds an bank_integration to a company", - * @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 bank_integration 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/BankIntegration"), - * ), - * @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 refreshAccounts(AdminBankIntegrationRequest $request) { // As yodlee is the first integration we don't need to perform switches yet, however // if we add additional providers we can reuse this class - $bank_account_id = auth()->user()->account->bank_integration_account_id; + + /** @var \App\Models\User $user */ + $user = auth()->user(); + + $user_account = $user->account; + + $bank_account_id = $user_account->bank_integration_account_id; if (!$bank_account_id) { return response()->json(['message' => 'Not yet authenticated with Bank Integration service'], 400); @@ -532,11 +208,11 @@ class BankIntegrationController extends BaseController $accounts = $yodlee->getAccounts(); foreach ($accounts as $account) { - if (!BankIntegration::withTrashed()->where('bank_account_id', $account['id'])->where('company_id', auth()->user()->company()->id)->exists()) { + if (!BankIntegration::withTrashed()->where('bank_account_id', $account['id'])->where('company_id', $user->company()->id)->exists()) { $bank_integration = new BankIntegration(); - $bank_integration->company_id = auth()->user()->company()->id; - $bank_integration->account_id = auth()->user()->account_id; - $bank_integration->user_id = auth()->user()->id; + $bank_integration->company_id = $user->company()->id; + $bank_integration->account_id = $user->account_id; + $bank_integration->user_id = $user->id; $bank_integration->bank_account_id = $account['id']; $bank_integration->bank_account_type = $account['account_type']; $bank_integration->bank_account_name = $account['account_name']; @@ -550,18 +226,16 @@ class BankIntegrationController extends BaseController $bank_integration->save(); } } - - $account = auth()->user()->account; if (Cache::get("throttle_polling:{$account->key}")) { return response()->json(BankIntegration::query()->company(), 200); } - $account->bank_integrations->each(function ($bank_integration) use ($account) { - ProcessBankTransactions::dispatch($account->bank_integration_account_id, $bank_integration); + $user_account->bank_integrations->each(function ($bank_integration) use ($user_account) { + ProcessBankTransactions::dispatch($user_account->bank_integration_account_id, $bank_integration); }); - Cache::put("throttle_polling:{$account->key}", true, 300); + Cache::put("throttle_polling:{$user_account->key}", true, 300); return response()->json(BankIntegration::query()->company(), 200); } @@ -572,40 +246,16 @@ class BankIntegrationController extends BaseController * * @return Response * - * @OA\Post( - * path="/api/v1/bank_integrations/remove_account/account_id", - * operationId="getRemoveAccount", - * tags={"bank_integrations"}, - * summary="Removes an account from the integration", - * description="Removes an account from the integration", - * @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 bank_integration 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/BankIntegration"), - * ), - * @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 removeAccount(AdminBankIntegrationRequest $request, $acc_id) { - $bank_account_id = auth()->user()->account->bank_integration_account_id; + /** @var \App\Models\User $user */ + $user = auth()->user(); + + $account = $user->account; + + $bank_account_id = $account->bank_integration_account_id; if (!$bank_account_id) { return response()->json(['message' => 'Not yet authenticated with Bank Integration service'], 400); @@ -628,40 +278,14 @@ class BankIntegrationController extends BaseController * * @return Response * - * @OA\Post( - * path="/api/v1/bank_integrations/get_transactions/account_id", - * operationId="getAccountTransactions", - * tags={"bank_integrations"}, - * summary="Retrieve transactions for a account", - * description="Retrieve transactions for a account", - * @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="Retrieve transactions for a account", - * @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/BankIntegration"), - * ), - * @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 getTransactions(AdminBankIntegrationRequest $request) { - auth()->user()->account->bank_integrations->each(function ($bank_integration) { - (new ProcessBankTransactions(auth()->user()->account->bank_integration_account_id, $bank_integration))->handle(); + /** @var \App\Models\User $user */ + $user = auth()->user(); + + $user->account->bank_integrations->each(function ($bank_integration) use ($user){ + (new ProcessBankTransactions($user->account->bank_integration_account_id, $bank_integration))->handle(); }); return response()->json(['message' => 'Fetching transactions....'], 200); diff --git a/app/Http/Controllers/EmailController.php b/app/Http/Controllers/EmailController.php index a9fdf75d271c..8cd59930b6d2 100644 --- a/app/Http/Controllers/EmailController.php +++ b/app/Http/Controllers/EmailController.php @@ -136,7 +136,10 @@ class EmailController extends BaseController $mo->email_template_body = $request->input('template'); $mo->email_template_subject = str_replace("template", "subject", $request->input('template')); - if ($request->has('cc_email') && $request->cc_email) { + /** @var \App\Models\User $user */ + $user = auth()->user(); + + if ($request->has('cc_email') && $request->cc_email && (Ninja::isSelfHost() || $user->account->isPaidHostedClient())) { $mo->cc[] = new Address($request->cc_email); } @@ -144,8 +147,6 @@ class EmailController extends BaseController if (! $invitation->contact->trashed() && $invitation->contact->email) { $entity_obj->service()->markSent()->save(); - // EmailEntity::dispatch($invitation->fresh(), $invitation->company, $template, $data); - $mo->invitation_id = $invitation->id; Email::dispatch($mo, $invitation->company); diff --git a/app/Http/Requests/Email/SendEmailRequest.php b/app/Http/Requests/Email/SendEmailRequest.php index 66a80e3f61eb..4b9a1b20983c 100644 --- a/app/Http/Requests/Email/SendEmailRequest.php +++ b/app/Http/Requests/Email/SendEmailRequest.php @@ -92,7 +92,11 @@ class SendEmailRequest extends Request /*Make sure we have all the require ingredients to send a template*/ if (array_key_exists('entity', $input) && array_key_exists('entity_id', $input) && is_string($input['entity']) && $input['entity_id']) { - $company = auth()->user()->company(); + + /** @var \App\Models\User $user */ + $user = auth()->user(); + + $company = $user->company(); $entity = $input['entity']; @@ -100,7 +104,7 @@ class SendEmailRequest extends Request $entity_obj = $entity::whereId($input['entity_id'])->withTrashed()->company()->first(); /* Check object, check user and company id is same as users, and check user can edit the object */ - if ($entity_obj && ($company->id == $entity_obj->company_id) && auth()->user()->can('edit', $entity_obj)) { + if ($entity_obj && ($company->id == $entity_obj->company_id) && $user->can('edit', $entity_obj)) { return true; } } diff --git a/app/Listeners/Invoice/InvoiceEmailedNotification.php b/app/Listeners/Invoice/InvoiceEmailedNotification.php index 4eb588879f4e..bf0859e2da25 100644 --- a/app/Listeners/Invoice/InvoiceEmailedNotification.php +++ b/app/Listeners/Invoice/InvoiceEmailedNotification.php @@ -37,6 +37,8 @@ class InvoiceEmailedNotification implements ShouldQueue */ public function handle($event) { + nlog($event->template); + MultiDB::setDb($event->company->db); $first_notification_sent = true; @@ -61,6 +63,20 @@ class InvoiceEmailedNotification implements ShouldQueue if (($key = array_search('mail', $methods)) !== false) { unset($methods[$key]); + // $template = $event->template ?? ''; + + // if(isset($event->reminder)){ + + // $template = match($event->reminder){ + // 63 => 'reminder1', + // 64 => 'reminder2', + // 65 => 'reminder3', + // 66 => 'endless_reminder', + // default => '' + // }; + + // } + $nmo = new NinjaMailerObject; $nmo->mailable = new NinjaMailer((new EntitySentObject($event->invitation, 'invoice', $event->template))->build()); $nmo->company = $invoice->company; diff --git a/app/Mail/Admin/EntitySentObject.php b/app/Mail/Admin/EntitySentObject.php index c3bc4eaa503e..96c184254f6d 100644 --- a/app/Mail/Admin/EntitySentObject.php +++ b/app/Mail/Admin/EntitySentObject.php @@ -136,6 +136,12 @@ class EntitySentObject $this->template_subject = 'texts.notification_purchase_order_sent_subject'; $this->template_body = 'texts.notification_purchase_order_sent'; break; + case 'custom1': + case 'custom2': + case 'custom3': + $this->template_subject = 'texts.notification_invoice_custom_sent_subject'; + $this->template_body = 'texts.notification_invoice_sent'; + break; default: $this->template_subject = 'texts.notification_invoice_sent_subject'; $this->template_body = 'texts.notification_invoice_sent'; diff --git a/app/Models/BaseModel.php b/app/Models/BaseModel.php index 52901ea8a215..5670a069570c 100644 --- a/app/Models/BaseModel.php +++ b/app/Models/BaseModel.php @@ -38,7 +38,8 @@ use Illuminate\Support\Str; * @method static \Illuminate\Database\Eloquent\Builder|BaseModel exclude(array $excludeable) * @method static \Illuminate\Database\Eloquent\Builder|BaseModel withTrashed() * @method static \Illuminate\Database\Eloquent\Builder|BaseModel scopeExclude() - * @method static \Illuminate\Database\Eloquent\Builder|BaseModel find() + * @method static \Illuminate\Database\Eloquent\Builder|BaseModel find() + * @method static \Illuminate\Database\Eloquent\Builder|BaseModel whereIn() * @method \App\Models\Company company() * @method int companyId() * @method Builder|static exclude($columns) diff --git a/app/Models/Invoice.php b/app/Models/Invoice.php index d0dc1024f58e..1e37f0ba7ca4 100644 --- a/app/Models/Invoice.php +++ b/app/Models/Invoice.php @@ -801,22 +801,29 @@ class Invoice extends BaseModel public function entityEmailEvent($invitation, $reminder_template, $template = '') { + nlog($template); + switch ($reminder_template) { case 'invoice': event(new InvoiceWasEmailed($invitation, $invitation->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null), $template)); break; case 'reminder1': - event(new InvoiceReminderWasEmailed($invitation, $invitation->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null), Activity::INVOICE_REMINDER1_SENT)); + event(new InvoiceReminderWasEmailed($invitation, $invitation->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null), $template)); break; case 'reminder2': - event(new InvoiceReminderWasEmailed($invitation, $invitation->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null), Activity::INVOICE_REMINDER2_SENT)); + event(new InvoiceReminderWasEmailed($invitation, $invitation->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null), $template)); break; case 'reminder3': - event(new InvoiceReminderWasEmailed($invitation, $invitation->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null), Activity::INVOICE_REMINDER3_SENT)); + event(new InvoiceReminderWasEmailed($invitation, $invitation->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null), $template)); break; case 'reminder_endless': case 'endless_reminder': - event(new InvoiceReminderWasEmailed($invitation, $invitation->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null), Activity::INVOICE_REMINDER_ENDLESS_SENT)); + event(new InvoiceReminderWasEmailed($invitation, $invitation->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null), $template)); + break; + case 'custom1': + case 'custom2': + case 'custom3': + event(new InvoiceReminderWasEmailed($invitation, $invitation->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null), $template)); break; default: // code... diff --git a/app/Models/StaticModel.php b/app/Models/StaticModel.php index 64c366556773..e82c68694d40 100644 --- a/app/Models/StaticModel.php +++ b/app/Models/StaticModel.php @@ -25,6 +25,8 @@ use Illuminate\Database\Eloquent\ModelNotFoundException as ModelNotFoundExceptio * @method static \Illuminate\Database\Eloquent\Builder|StaticModel newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|StaticModel newQuery() * @method static \Illuminate\Database\Eloquent\Builder|StaticModel query() + * @method static \Illuminate\Database\Eloquent\Builder|StaticModel find() + * @method static \Illuminate\Database\Eloquent\Builder|StaticModel findOrFail() * @mixin \Eloquent */ class StaticModel extends Model @@ -50,7 +52,10 @@ class StaticModel extends Model */ public function scopeCompany($query) { - $query->where('company_id', auth()->user()->companyId()); + /** @var \App\Models\User $user */ + $user = auth()->user(); + + $query->where('company_id', $user->companyId()); return $query; } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index d0f17d0a170c..7faeaf96b82d 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -40,15 +40,15 @@ class AppServiceProvider extends ServiceProvider */ public function boot() { - // DB::listen(function($query) { - // nlog( - // $query->sql, - // [ - // 'bindings' => $query->bindings, - // 'time' => $query->time - // ] - // ); - // }); + \DB::listen(function($query) { + nlog( + $query->sql, + [ + 'bindings' => $query->bindings, + 'time' => $query->time + ] + ); + }); // Model::preventLazyLoading( // !$this->app->isProduction() diff --git a/database/migrations/2023_04_27_045639_add_kmher_language.php b/database/migrations/2023_04_27_045639_add_kmher_language.php new file mode 100644 index 000000000000..bc841b67eb2d --- /dev/null +++ b/database/migrations/2023_04_27_045639_add_kmher_language.php @@ -0,0 +1,37 @@ + 38, 'name' => 'Khmer', 'locale' => 'km_KH']); + } + + + + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +}; diff --git a/database/seeders/LanguageSeeder.php b/database/seeders/LanguageSeeder.php index 1291b915014e..5a27e677b850 100644 --- a/database/seeders/LanguageSeeder.php +++ b/database/seeders/LanguageSeeder.php @@ -57,6 +57,12 @@ class LanguageSeeder extends Seeder ['id' => 30, 'name' => 'Arabic', 'locale' => 'ar'], ['id' => 31, 'name' => 'Persian', 'locale' => 'fa'], ['id' => 32, 'name' => 'Latvian', 'locale' => 'lv_LV'], + ['id' => 33, 'name' => 'Serbian', 'locale' => 'sr'], + ['id' => 34, 'name' => 'Slovak', 'locale' => 'sk'], + ['id' => 35, 'name' => 'Estonian', 'locale' => 'et'], + ['id' => 36, 'name' => 'Bulgarian', 'locale' => 'bg'], + ['id' => 37, 'name' => 'Hebrew', 'locale' => 'he'], + ['id' => 38, 'name' => 'Khmer', 'locale' => 'km_KH'], ]; foreach ($languages as $language) { @@ -69,29 +75,5 @@ class LanguageSeeder extends Seeder } } - if (!Language::find(33)) { - $serbian = ['id' => 33, 'name' => 'Serbian', 'locale' => 'sr']; - Language::create($serbian); - } - - if (!Language::find(34)) { - $slovak = ['id' => 34, 'name' => 'Slovak', 'locale' => 'sk']; - Language::create($slovak); - } - - if (!Language::find(35)) { - $estonia = ['id' => 35, 'name' => 'Estonian', 'locale' => 'et']; - Language::create($estonia); - } - - if (!Language::find(36)) { - $bulgarian = ['id' => 36, 'name' => 'Bulgarian', 'locale' => 'bg']; - Language::create($bulgarian); - } - - if (!Language::find(37)) { - $hebrew = ['id' => 37, 'name' => 'Hebrew', 'locale' => 'he']; - Language::create($hebrew); - } } } diff --git a/lang/ar/texts.php b/lang/ar/texts.php index 09b6943947d0..db623f864e1b 100644 --- a/lang/ar/texts.php +++ b/lang/ar/texts.php @@ -5002,7 +5002,7 @@ $LANG = array( 'payment_type_Interac E Transfer' => 'Interac E Transfer', 'xinvoice_payable' => 'مستحق الدفع paydate: صافي أيام الدفع payeddue: تاريخ الدفع', 'xinvoice_no_buyers_reference' => "لم يتم إعطاء إشارة للمشتري", - 'xinvoice_online_payment' => 'يجب دفع الفاتورة عبر الإنترنت من خلال الرابط المقدم', + 'xinvoice_online_payment' => 'The invoice needs to be paid online via the provided link', 'pre_payment' => 'الدفع المسبق', 'number_of_payments' => 'عدد الدفعات', 'number_of_payments_helper' => 'عدد المرات التي سيتم فيها إجراء هذه الدفعة', @@ -5086,6 +5086,8 @@ $LANG = array( 'services' => 'Services', 'shipping' => 'Shipping', 'tax_exempt' => 'Tax Exempt', + 'late_fee_added_locked_invoice' => 'Late fee for invoice :invoice added on :date', + ); diff --git a/lang/de/texts.php b/lang/de/texts.php index 8c236504dea3..555d631999cb 100644 --- a/lang/de/texts.php +++ b/lang/de/texts.php @@ -4983,7 +4983,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting', 'payment_type_Interac E Transfer' => 'Interac E-Übertragung', 'xinvoice_payable' => 'Zahlbar innerhalb von :payeddue Tagen netto bis :paydate', 'xinvoice_no_buyers_reference' => "Keine Käuferreferenz angegeben", - 'xinvoice_online_payment' => 'Die Rechnung muss online über den bereitgestellten Link bezahlt werden', + 'xinvoice_online_payment' => 'The invoice needs to be paid online via the provided link', 'pre_payment' => 'Vorauszahlung', 'number_of_payments' => 'Anzahl der Zahlungen', 'number_of_payments_helper' => 'Die Häufigkeit, mit der diese Zahlung erfolgt', @@ -5067,6 +5067,8 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting', 'services' => 'Services', 'shipping' => 'Shipping', 'tax_exempt' => 'Tax Exempt', + 'late_fee_added_locked_invoice' => 'Late fee for invoice :invoice added on :date', + ); diff --git a/lang/en/texts.php b/lang/en/texts.php index 2589724e3a11..7499b0386f21 100644 --- a/lang/en/texts.php +++ b/lang/en/texts.php @@ -4012,6 +4012,7 @@ $LANG = array( 'notification_invoice_reminder1_sent_subject' => 'Reminder 1 for Invoice :invoice was sent to :client', 'notification_invoice_reminder2_sent_subject' => 'Reminder 2 for Invoice :invoice was sent to :client', 'notification_invoice_reminder3_sent_subject' => 'Reminder 3 for Invoice :invoice was sent to :client', + 'notification_invoice_custom_sent_subject' => 'Custom reminder for Invoice :invoice was sent to :client', 'notification_invoice_reminder_endless_sent_subject' => 'Endless reminder for Invoice :invoice was sent to :client', 'assigned_user' => 'Assigned User', 'setup_steps_notice' => 'To proceed to next step, make sure you test each section.', @@ -5066,7 +5067,7 @@ $LANG = array( 'shipping' => 'Shipping', 'tax_exempt' => 'Tax Exempt', 'late_fee_added_locked_invoice' => 'Late fee for invoice :invoice added on :date', - + 'lang_Khmer' => 'Khmer', ); diff --git a/lang/es/texts.php b/lang/es/texts.php index e4b63f7541a8..86912b5af3c2 100644 --- a/lang/es/texts.php +++ b/lang/es/texts.php @@ -4979,7 +4979,7 @@ $LANG = array( 'payment_type_Interac E Transfer' => 'Transferencia Interac E', 'xinvoice_payable' => 'Payable within :payeddue days net until :paydate', 'xinvoice_no_buyers_reference' => "No se da referencia del comprador", - 'xinvoice_online_payment' => 'La factura debe pagarse en línea a través del enlace provisto', + 'xinvoice_online_payment' => 'The invoice needs to be paid online via the provided link', 'pre_payment' => 'Prepago', 'number_of_payments' => 'numero de pagos', 'number_of_payments_helper' => 'El número de veces que se realizará este pago.', @@ -5063,6 +5063,8 @@ $LANG = array( 'services' => 'Services', 'shipping' => 'Shipping', 'tax_exempt' => 'Tax Exempt', + 'late_fee_added_locked_invoice' => 'Late fee for invoice :invoice added on :date', + ); diff --git a/lang/es_ES/texts.php b/lang/es_ES/texts.php index 5aa49b092e8c..99e6118a5cdb 100644 --- a/lang/es_ES/texts.php +++ b/lang/es_ES/texts.php @@ -4971,7 +4971,7 @@ Una vez que tenga los montos, vuelva a esta página de métodos de pago y haga c 'payment_type_Interac E Transfer' => 'Interac E Transfer', 'xinvoice_payable' => 'Pagadero dentro de :payeddue días de pago vencido neto hasta :paydate', 'xinvoice_no_buyers_reference' => "No se da la referencia del comprador", - 'xinvoice_online_payment' => 'La factura debe pagarse en línea a través del enlace proporcionado.', + 'xinvoice_online_payment' => 'The invoice needs to be paid online via the provided link', 'pre_payment' => 'Prepago', 'number_of_payments' => 'Numero de pagos', 'number_of_payments_helper' => 'El número de veces que se realizará este pago.', @@ -5055,6 +5055,8 @@ Una vez que tenga los montos, vuelva a esta página de métodos de pago y haga c 'services' => 'Servicios', 'shipping' => 'Envío', 'tax_exempt' => 'Exento de impuestos', + 'late_fee_added_locked_invoice' => 'Late fee for invoice :invoice added on :date', + ); diff --git a/lang/fr/texts.php b/lang/fr/texts.php index bf190afc422c..a981e03b17ab 100644 --- a/lang/fr/texts.php +++ b/lang/fr/texts.php @@ -4975,7 +4975,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'payment_type_Interac E Transfer' => 'Virement Interac E', 'xinvoice_payable' => 'Payable sous :payeddue days net jusqu\'au :paydate', 'xinvoice_no_buyers_reference' => "Aucune référence d'acheteur donnée", - 'xinvoice_online_payment' => 'La facture doit être payée en ligne via le lien fourni', + 'xinvoice_online_payment' => 'The invoice needs to be paid online via the provided link', 'pre_payment' => 'Prépaiement', 'number_of_payments' => 'Nombre de paiements', 'number_of_payments_helper' => 'Le nombre de fois que ce paiement sera effectué', @@ -5059,6 +5059,8 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'services' => 'Services', 'shipping' => 'Shipping', 'tax_exempt' => 'Tax Exempt', + 'late_fee_added_locked_invoice' => 'Late fee for invoice :invoice added on :date', + ); diff --git a/lang/fr_CA/texts.php b/lang/fr_CA/texts.php index 1478f597cc62..3e9e295c2739 100644 --- a/lang/fr_CA/texts.php +++ b/lang/fr_CA/texts.php @@ -4882,7 +4882,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'email_queued' => 'Courriel en file d\'attente', 'clone_to_recurring_invoice' => 'Dupliquer en facture récurrente', 'inventory_threshold' => 'Seuil d\'inventaire', - 'emailed_statement' => 'L\'état de compte a été mis en file d\'attente pour l\'envoi', + 'emailed_statement' => 'Le relevé a été mis en file d\'attente pour l\'envoi', 'show_email_footer' => 'Afficher le pied de page du courriel', 'invoice_task_hours' => 'Facturer les heures de tâches', 'invoice_task_hours_help' => 'Ajouter ces heures aux articles de la facture', @@ -4910,7 +4910,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'all_clients' => 'Tous les clients', 'show_aging_table' => 'Afficher la liste des impayés', 'show_payments_table' => 'Afficher la liste des paiements', - 'email_statement' => 'Envoyer par courriel l\'état de compte', + 'email_statement' => 'Envoyer le relevé par courriel', 'once' => 'Une fois', 'schedules' => 'Planifications', 'new_schedule' => 'Nouvelle planification', @@ -4973,7 +4973,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'payment_type_Interac E Transfer' => 'Transfert Interac', 'xinvoice_payable' => 'Payable d\'ici :payeddue jours jusqu\'à :paydate', 'xinvoice_no_buyers_reference' => "Aucune référence de l'acheteur fournie", - 'xinvoice_online_payment' => 'Cette facture doit être payée en ligne en utilisant le lien fourni', + 'xinvoice_online_payment' => 'Cette facture doit être payée en ligne en suivant le lien fourni', 'pre_payment' => 'Prépaiement', 'number_of_payments' => 'Nombre de paiements', 'number_of_payments_helper' => 'Nombre de fois que ce paiement sera fait', @@ -5037,7 +5037,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'tax_all' => 'Tout taxer', 'tax_selected' => 'Taxe sélectionnée', 'version' => 'version', - 'seller_subregion' => 'Sous-région du vendeur', + 'seller_subregion' => 'Province du vendeur', 'calculate_taxes' => 'Calculer les taxes', 'calculate_taxes_help' => 'Calcul automatique des taxes à la sauvegarde des factures', 'link_expenses' => 'Lier les dépenses', @@ -5057,6 +5057,8 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'services' => 'Services', 'shipping' => 'Livraison', 'tax_exempt' => 'Exemption de taxes', + 'late_fee_added_locked_invoice' => 'Les frais de retard pour la facture :invoice ont été ajoutés le :date', + ); diff --git a/lang/it/texts.php b/lang/it/texts.php index de7d597d7036..a7dbebeb159b 100644 --- a/lang/it/texts.php +++ b/lang/it/texts.php @@ -4966,7 +4966,7 @@ $LANG = array( 'payment_type_Interac E Transfer' => 'Interac E Trasferimento', 'xinvoice_payable' => 'Pagabile entro :payeddue giorni netti fino :paydate', 'xinvoice_no_buyers_reference' => "Nessun riferimento dell'acquirente fornito", - 'xinvoice_online_payment' => 'La fattura deve essere pagata online tramite il link fornito', + 'xinvoice_online_payment' => 'The invoice needs to be paid online via the provided link', 'pre_payment' => 'Pagamento anticipato', 'number_of_payments' => 'Numero di pagamenti', 'number_of_payments_helper' => 'Il numero di volte in cui verrà effettuato questo pagamento', @@ -5050,6 +5050,8 @@ $LANG = array( 'services' => 'Services', 'shipping' => 'Shipping', 'tax_exempt' => 'Tax Exempt', + 'late_fee_added_locked_invoice' => 'Late fee for invoice :invoice added on :date', + ); diff --git a/lang/km_KH/auth.php b/lang/km_KH/auth.php new file mode 100644 index 000000000000..6598e2c06073 --- /dev/null +++ b/lang/km_KH/auth.php @@ -0,0 +1,20 @@ + 'These credentials do not match our records.', + 'password' => 'The provided password is incorrect.', + 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', + +]; diff --git a/lang/km_KH/help.php b/lang/km_KH/help.php new file mode 100644 index 000000000000..a2f04708161b --- /dev/null +++ b/lang/km_KH/help.php @@ -0,0 +1,13 @@ + 'Message to be displayed on clients dashboard', + 'client_currency' => 'The client currency.', + 'client_language' => 'The client language.', + 'client_payment_terms' => 'The client payment terms.', + 'client_paid_invoice' => 'Message to be displayed on a clients paid invoice screen', + 'client_unpaid_invoice' => 'Message to be displayed on a clients unpaid invoice screen', + 'client_unapproved_quote' => 'Message to be displayed on a clients unapproved quote screen', +]; + +return $lang; diff --git a/lang/km_KH/pagination.php b/lang/km_KH/pagination.php new file mode 100644 index 000000000000..2b9b38e09b49 --- /dev/null +++ b/lang/km_KH/pagination.php @@ -0,0 +1,19 @@ + '« Previous', + 'next' => 'Next »', + +]; diff --git a/lang/km_KH/passwords.php b/lang/km_KH/passwords.php new file mode 100644 index 000000000000..52c61c69a957 --- /dev/null +++ b/lang/km_KH/passwords.php @@ -0,0 +1,23 @@ + 'Passwords must be at least six characters and match the confirmation.', + 'reset' => 'Your password has been reset!', + 'sent' => 'We have e-mailed your password reset link!', + 'token' => 'This password reset token is invalid.', + 'user' => "We can't find a user with that e-mail address.", + 'throttled' => 'You have requested password reset recently, please check your email.', + +]; diff --git a/lang/km_KH/texts.php b/lang/km_KH/texts.php new file mode 100644 index 000000000000..d2368bf5b6bf --- /dev/null +++ b/lang/km_KH/texts.php @@ -0,0 +1,5048 @@ + 'អង្គការ', + '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', + 'po_number_short' => 'PO #', + 'frequency_id' => 'ជាញឹកញាប់', + 'discount' => 'បញ្ចុះតម្លៃ', + 'taxes' => 'ពន្ធ', + 'tax' => 'ពន្ធ', + 'item' => 'ធាតុ', + 'description' => 'ការពិពណ៌នា', + 'unit_cost' => 'តម្លៃឯកតា', + 'quantity' => 'បរិមាណ', + 'line_total' => 'ជួរសរុប', + 'subtotal' => 'សរុបរង', + 'net_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 ។
ឧទាហរណ៍នៃអថេរវិក្កយបត្រថាមវន្ត៖
យើងប្រើ :pdfmake_link ដើម្បីកំណត់ការរចនាវិក្កយបត្រដោយប្រកាស។ pdfmake :playground_link ផ្តល់នូវវិធីដ៏ល្អមួយដើម្បីមើលបណ្ណាល័យដែលកំពុងដំណើរការ។
ប្រសិនបើអ្នកត្រូវការជំនួយក្នុងការស្វែងរកអ្វីមួយ សូមបង្ហោះសំណួរទៅកាន់ :forum_link របស់យើងជាមួយនឹងការរចនាដែលអ្នកកំពុងប្រើ។
', + 'playground' => 'សួនកុមារ', + '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' => 'បង្ហាញ ពន្ធធាតុក្នុងបន្ទាត់', + 'iframe_url' => 'គេហទំព័រ', + 'iframe_url_help1' => 'ចម្លងកូដខាងក្រោមទៅទំព័រមួយនៅលើគេហទំព័ររបស់អ្នក។', + 'iframe_url_help2' => 'អ្នកអាចសាកល្បងមុខងារនេះដោយចុច 'មើលជាអ្នកទទួល' សម្រាប់វិក្កយបត្រមួយ។', + 'auto_bill' => 'វិក័យប័ត្រស្វ័យប្រវត្តិ', + 'military_time' => 'ពេលវេលា 24 ម៉ោង។', + 'last_sent' => 'បានផ្ញើចុងក្រោយ', + 'reminder_emails' => 'អ៊ីមែលរំលឹក', + 'quote_reminder_emails' => 'អ៊ីមែលរំលឹកសម្រង់', + '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' => 'URL យោង', + 'last_sent_on' => 'បានផ្ញើចុងក្រោយ៖ :date', + 'page_expire' => 'ទំព័រនេះនឹងផុតកំណត់ក្នុងពេលឆាប់ៗនេះ :click_here ដើម្បីបន្តដំណើរការ', + 'upcoming_quotes' => 'សម្រង់នាពេលខាងមុខ', + 'expired_quotes' => 'សម្រង់ផុតកំណត់', + 'sign_up_using' => 'ចុះឈ្មោះដោយប្រើ', + 'invalid_credentials' => 'លិខិតសម្គាល់ទាំងនេះមិនត្រូវគ្នានឹងកំណត់ត្រារបស់យើងទេ។', + 'show_all_options' => 'បង្ហាញជម្រើសទាំងអស់។', + 'user_details' => 'ព័ត៌មានលម្អិតអ្នកប្រើប្រាស់', + 'oneclick_login' => 'គណនីដែលបានភ្ជាប់', + 'disable' => 'បិទ', + 'invoice_quote_number' => 'លេខវិក្កយបត្រ និងលេខសម្រង់', + 'invoice_charges' => 'វិក័យប័ត្របន្ថែម', + 'notification_invoice_bounced' => 'យើងមិនអាចប្រគល់វិក្កយបត្រ :invoice ទៅ :contact បានទេ។', + 'notification_invoice_bounced_subject' => 'មិនអាចចែកចាយវិក្កយបត្រ :invoice', + 'notification_quote_bounced' => 'យើងមិនអាចបញ្ជូនសម្រង់ :invoice ទៅ :contact បានទេ។', + 'notification_quote_bounced_subject' => 'មិនអាចចែកចាយសម្រង់ :invoice', + 'custom_invoice_link' => 'តំណភ្ជាប់វិក្កយបត្រផ្ទាល់ខ្លួន', + 'total_invoiced' => 'វិក្កយបត្រសរុប', + 'open_balance' => 'បើកសមតុល្យ', + 'verify_email' => 'សូមចូលទៅកាន់តំណភ្ជាប់ក្នុងអ៊ីមែលបញ្ជាក់គណនី ដើម្បីផ្ទៀងផ្ទាត់អាសយដ្ឋានអ៊ីមែលរបស់អ្នក។', + 'basic_settings' => 'ការកំណត់មូលដ្ឋាន', + 'pro' => 'ប្រូ', + 'gateways' => 'ច្រកផ្លូវបង់ប្រាក់', + 'next_send_on' => 'ផ្ញើបន្ទាប់៖ :date', + 'no_longer_running' => 'វិក្កយបត្រនេះមិនត្រូវបានកំណត់ពេលដំណើរការទេ។', + 'general_settings' => 'ការកំណត់ទូទៅ', + 'customize' => 'ប្ដូរតាមបំណង', + 'oneclick_login_help' => 'ភ្ជាប់គណនីដើម្បីចូលដោយគ្មានពាក្យសម្ងាត់', + 'referral_code_help' => 'រកប្រាក់ដោយការចែករំលែកកម្មវិធីរបស់យើងតាមអ៊ីនធឺណិត', + 'enable_with_stripe' => 'បើក | ទាមទារ Stripe', + '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' => 'ម៉ោងបន្ត', + 'pattern' => 'លំនាំ', + 'pattern_help_title' => 'ជំនួយលំនាំ', + 'pattern_help_1' => 'បង្កើតលេខផ្ទាល់ខ្លួនដោយបញ្ជាក់លំនាំ', + 'pattern_help_2' => 'អថេរដែលអាចប្រើបាន៖', + 'pattern_help_3' => 'ឧទាហរណ៍ :example នឹងត្រូវបានបំប្លែងទៅជា :value', + 'see_options' => 'មើលជម្រើស', + 'invoice_counter' => 'បញ្ជរវិក្កយបត្រ', + 'quote_counter' => 'បញ្ជរសម្រង់', + 'type' => 'ប្រភេទ', + 'activity_1' => ':user បានបង្កើតម៉ាស៊ីនភ្ញៀវ :client', + 'activity_2' => ':user ម៉ាស៊ីនភ្ញៀវដែលបានទុកក្នុងប័ណ្ណសារ :client', + 'activity_3' => ':user ម៉ាស៊ីនភ្ញៀវដែលបានលុប :client', + 'activity_4' => ':user បានបង្កើតវិក្កយបត្រ :invoice', + 'activity_5' => ':user បានធ្វើបច្ចុប្បន្នភាពវិក្កយបត្រ :invoice', + 'activity_6' => ':user វិក្កយបត្រដែលបានផ្ញើតាមអ៊ីមែល :invoice សម្រាប់ :client ទៅ :contact', + 'activity_7' => ':contact បានមើលវិក្កយបត្រ :invoice សម្រាប់ :client', + 'activity_8' => ':user បានរក្សាទុកវិក្កយបត្រ :invoice', + 'activity_9' => ':user បានលុបវិក្កយបត្រ :invoice', + 'activity_10' => ':contact បានបញ្ចូលការទូទាត់ :payment សម្រាប់ :payment_ចំនួននៅលើវិក្កយបត្រ :invoice សម្រាប់ :client', + 'activity_11' => ':user ការទូទាត់បានធ្វើបច្ចុប្បន្នភាព :payment', + 'activity_12' => ':user ការទូទាត់ទុកក្នុងប័ណ្ណសារ :payment', + 'activity_13' => ':user បានលុបការទូទាត់ :payment', + 'activity_14' => ':user បានបញ្ចូលឥណទាន :credit', + 'activity_15' => ':user បានធ្វើបច្ចុប្បន្នភាពឥណទាន :credit', + 'activity_16' => ':user ទុកក្នុងប័ណ្ណសារឥណទាន :credit', + 'activity_17' => ':user បានលុបឥណទាន :credit', + 'activity_18' => ':user បានបង្កើតសម្រង់ :quote', + 'activity_19' => ':user បានធ្វើបច្ចុប្បន្នភាពសម្រង់ :quote', + 'activity_20' => ':user សម្រង់តាមអ៊ីមែល :quote សម្រាប់ :client ទៅ :contact', + 'activity_21' => ':contact បានមើលសម្រង់ :quote', + 'activity_22' => ':user សម្រង់ទុកក្នុងប័ណ្ណសារ :quote', + 'activity_23' => ':user បានលុបសម្រង់ :quote', + 'activity_24' => ':user បានស្ដារសម្រង់ :quote', + 'activity_25' => ':user បានស្ដារវិក្កយបត្រ :invoice', + 'activity_26' => ':user ម៉ាស៊ីនភ្ញៀវដែលបានស្ដារ :client', + 'activity_27' => ':user ការទូទាត់ឡើងវិញ :payment', + 'activity_28' => ':user បានស្ដារឥណទាន :credit', + 'activity_29' => ':contact បានអនុម័តសម្រង់ :quote សម្រាប់ :client', + 'activity_30' => ':user បានបង្កើតអ្នកលក់ :vendor', + 'activity_31' => ':user អ្នកលក់ដែលបានរក្សាទុក :vendor', + 'activity_32' => ':user បានលុបអ្នកលក់ :vendor', + 'activity_33' => ':user អ្នកលក់បានស្ដារ :vendor', + 'activity_34' => ':user បង្កើតការចំណាយ :expense', + 'activity_35' => ':user ការចំណាយដែលបានទុកក្នុងប័ណ្ណសារ :expense', + 'activity_36' => ':user ការចំណាយដែលបានលុប :expense', + 'activity_37' => ':user ការចំណាយដែលបានស្ដារឡើងវិញ :expense', + 'activity_42' => ':user បង្កើតភារកិច្ច :task', + 'activity_43' => ':user ធ្វើបច្ចុប្បន្នភាពកិច្ចការ :task', + 'activity_44' => ':user កិច្ចការដែលបានរក្សាទុកក្នុងប័ណ្ណសារ :task', + 'activity_45' => ':user បានលុបភារកិច្ច :task', + 'activity_46' => ':user ភារកិច្ចដែលបានស្ដារ :task', + 'activity_47' => ':user ការចំណាយបានធ្វើបច្ចុប្បន្នភាព :expense', + 'activity_48' => ':user អ្នកប្រើប្រាស់បានបង្កើត :user', + 'activity_49' => ':user អ្នកប្រើប្រាស់បានធ្វើបច្ចុប្បន្នភាព :user', + 'activity_50' => ':user អ្នកប្រើប្រាស់ដែលបានរក្សាទុក :user', + 'activity_51' => ':user បានលុបអ្នកប្រើប្រាស់ :user', + 'activity_52' => ':user អ្នកប្រើប្រាស់ដែលបានស្ដារ :user', + 'activity_53' => ':user សម្គាល់បានផ្ញើ :invoice', + 'activity_54' => ':user វិក្កយបត្របង់ប្រាក់ :invoice', + 'activity_55' => ':contact សំបុត្រឆ្លើយតប៖ សំបុត្រ', + 'activity_56' => ':user បានមើលសំបុត្រ៖ សំបុត្រ', + + 'payment' => 'ការទូទាត់', + 'system' => 'ប្រព័ន្ធ', + 'signature' => 'ហត្ថលេខាអ៊ីមែល', + 'default_messages' => 'សារលំនាំដើម', + 'quote_terms' => 'លក្ខខណ្ឌដកស្រង់', + 'default_quote_terms' => 'លក្ខខណ្ឌសម្រង់លំនាំដើម', + 'default_invoice_terms' => 'លក្ខខណ្ឌវិក្កយបត្រលំនាំដើម', + 'default_invoice_footer' => 'បាតកថាវិក្កយបត្រលំនាំដើម', + 'quote_footer' => 'បាតកថាសម្រង់', + 'free' => 'ឥតគិតថ្លៃ', + 'quote_is_approved' => 'បានអនុម័តដោយជោគជ័យ', + 'apply_credit' => 'អនុវត្តឥណទាន', + 'system_settings' => 'ការកំណត់ប្រព័ន្ធ', + 'archive_token' => 'បណ្ណសារថូខឹន', + 'archived_token' => 'បានរក្សាទុកសញ្ញាសម្ងាត់ដោយជោគជ័យ', + 'archive_user' => 'អ្នកប្រើប្រាស់បណ្ណសារ', + 'archived_user' => 'អ្នកប្រើប្រាស់បានរក្សាទុកក្នុងប័ណ្ណសារដោយជោគជ័យ', + 'archive_account_gateway' => 'លុបច្រកផ្លូវ', + 'archived_account_gateway' => 'ច្រកចេញចូលប័ណ្ណសារដោយជោគជ័យ', + 'archive_recurring_invoice' => 'ទុកវិក្កយបត្រដែលកើតឡើងដដែលៗក្នុងប័ណ្ណសារ', + 'archived_recurring_invoice' => 'បានរក្សាទុកវិក្កយបត្រដែលកើតឡើងដដែលៗដោយជោគជ័យ', + 'delete_recurring_invoice' => 'លុបវិក្កយបត្រដែលកើតឡើងដដែលៗ', + 'deleted_recurring_invoice' => 'បានលុបវិក្កយបត្រដែលកើតឡើងដដែលៗដោយជោគជ័យ', + 'restore_recurring_invoice' => 'ស្តារវិក្កយបត្រដែលកើតឡើងដដែលៗ', + 'restored_recurring_invoice' => 'បានស្ដារវិក្កយបត្រដែលកើតឡើងវិញដោយជោគជ័យ', + 'archive_recurring_quote' => 'បណ្ណសារសម្រង់ដែលកើតឡើងដដែលៗ', + 'archived_recurring_quote' => 'បានរក្សាទុកសម្រង់ដែលកើតឡើងដដែលៗដោយជោគជ័យ', + 'delete_recurring_quote' => 'លុបសម្រង់ដែលកើតឡើងដដែលៗ', + 'deleted_recurring_quote' => 'បានលុបសម្រង់ដែលកើតឡើងដដែលៗដោយជោគជ័យ', + 'restore_recurring_quote' => 'ស្តារសម្រង់ដែលកើតឡើងដដែលៗ', + 'restored_recurring_quote' => 'បានស្ដារសម្រង់ដែលកើតឡើងដដែលៗដោយជោគជ័យ', + 'archived' => 'ទុកក្នុងប័ណ្ណសារ', + 'untitled_account' => 'ក្រុមហ៊ុនគ្មានចំណងជើង', + 'before' => 'ពីមុន', + 'after' => 'បន្ទាប់ពី', + 'reset_terms_help' => 'កំណត់ឡើងវិញទៅលក្ខខណ្ឌគណនីលំនាំដើម', + 'reset_footer_help' => 'កំណត់ឡើងវិញទៅបាតកថាគណនីលំនាំដើម', + 'export_data' => 'នាំចេញទិន្នន័យ', + 'user' => 'អ្នកប្រើ', + 'country' => 'ប្រទេស', + 'include' => 'រួមបញ្ចូល', + 'logo_too_large' => 'និមិត្តសញ្ញារបស់អ្នកគឺ :size សម្រាប់ដំណើរការ PDF កាន់តែប្រសើរ យើងស្នើឱ្យផ្ទុកឯកសាររូបភាពតិចជាង 200KB', + 'import_freshbooks' => 'នាំចូលពី FreshBooks', + 'import_data' => 'នាំចូលទិន្នន័យ', + 'source' => 'ប្រភព', + 'csv' => 'CSV', + 'client_file' => 'ឯកសារអតិថិជន', + 'invoice_file' => 'ឯកសារវិក្កយបត្រ', + 'task_file' => 'ឯកសារកិច្ចការ', + 'no_mapper' => 'មិនមានផែនទីត្រឹមត្រូវសម្រាប់ឯកសារទេ។', + 'invalid_csv_header' => 'បឋមកថា CSV មិនត្រឹមត្រូវ', + 'client_portal' => 'វិបផតថលអតិថិជន', + 'admin' => 'អ្នកគ្រប់គ្រង', + 'disabled' => 'ពិការ', + 'show_archived_users' => 'បង្ហាញអ្នកប្រើប្រាស់ដែលបានរក្សាទុក', + 'notes' => 'កំណត់ចំណាំ', + 'invoice_will_create' => 'វិក្កយបត្រនឹងត្រូវបានបង្កើត', + 'invoices_will_create' => 'វិក្កយបត្រនឹងត្រូវបានបង្កើត', + 'failed_to_import' => 'កំណត់ត្រាខាងក្រោមបានបរាជ័យក្នុងការនាំចូល ពួកវាមានរួចហើយ ឬបាត់វាលដែលត្រូវការ។', + 'publishable_key' => 'សោដែលអាចបោះពុម្ពបាន។', + 'secret_key' => 'សោសម្ងាត់', + 'missing_publishable_key' => 'កំណត់សោដែលអាចបោះពុម្ពបាន Stripe របស់អ្នកសម្រាប់ដំណើរការទូទាត់ប្រាក់ដែលប្រសើរឡើង', + 'email_design' => 'រចនាអ៊ីមែល', + 'due_by' => 'កំណត់ដោយ :date', + 'enable_email_markup' => 'បើកការសម្គាល់', + 'enable_email_markup_help' => 'ធ្វើឱ្យវាកាន់តែងាយស្រួលសម្រាប់អតិថិជនរបស់អ្នកក្នុងការបង់ប្រាក់ឱ្យអ្នកដោយបន្ថែមសញ្ញាសម្គាល់ schema.org ទៅក្នុងអ៊ីមែលរបស់អ្នក។', + 'template_help_title' => 'ជំនួយគំរូ', + 'template_help_1' => 'អថេរដែលអាចប្រើបាន៖', + 'email_design_id' => 'រចនាប័ទ្មអ៊ីមែល', + 'email_design_help' => 'ធ្វើឱ្យអ៊ីមែលរបស់អ្នកមើលទៅមានលក្ខណៈវិជ្ជាជីវៈជាងមុនជាមួយនឹងប្លង់ HTML ។', + 'plain' => 'ធម្មតា។', + 'light' => 'ពន្លឺ', + 'dark' => 'ងងឹត', + 'industry_help' => 'ប្រើដើម្បីផ្តល់ការប្រៀបធៀបធៀបនឹងមធ្យមភាគនៃក្រុមហ៊ុនដែលមានទំហំ និងឧស្សាហកម្មស្រដៀងគ្នា។', + 'subdomain_help' => 'កំណត់ដែនរង ឬបង្ហាញវិក្កយបត្រនៅលើគេហទំព័រផ្ទាល់ខ្លួនរបស់អ្នក។', + 'website_help' => 'បង្ហាញវិក្កយបត្រនៅក្នុង iFrame នៅលើគេហទំព័រផ្ទាល់ខ្លួនរបស់អ្នក។', + 'invoice_number_help' => 'បញ្ជាក់បុព្វបទ ឬប្រើលំនាំផ្ទាល់ខ្លួនដើម្បីកំណត់លេខវិក្កយបត្រដោយថាមវន្ត។', + 'quote_number_help' => 'បញ្ជាក់បុព្វបទ ឬប្រើលំនាំផ្ទាល់ខ្លួនដើម្បីកំណត់លេខសម្រង់ថាមវន្ត។', + 'custom_client_fields_helps' => 'បន្ថែមវាលមួយនៅពេលបង្កើតអតិថិជន ហើយបង្ហាញស្លាក និងតម្លៃជាជម្រើសនៅលើ PDF ។', + 'custom_account_fields_helps' => 'បន្ថែមស្លាក និងតម្លៃទៅផ្នែកព័ត៌មានលម្អិតរបស់ក្រុមហ៊ុននៃ PDF ។', + 'custom_invoice_fields_helps' => 'បន្ថែមវាលមួយនៅពេលបង្កើតវិក្កយបត្រ ហើយជាជម្រើសបង្ហាញស្លាក និងតម្លៃនៅលើ PDF ។', + 'custom_invoice_charges_helps' => 'បន្ថែមវាលមួយនៅពេលបង្កើតវិក្កយបត្រ ហើយរួមបញ្ចូលការគិតថ្លៃនៅក្នុងផលបូករងវិក្កយបត្រ។', + 'token_expired' => 'និមិត្តសញ្ញាសុពលភាពត្រូវបានផុតកំណត់។ សូមព្យាយាមម្តងទៀត។', + 'invoice_link' => 'តំណភ្ជាប់វិក្កយបត្រ', + 'button_confirmation_message' => 'បញ្ជាក់អ៊ីមែលរបស់អ្នក។', + 'confirm' => 'បញ្ជាក់', + 'email_preferences' => 'ចំណូលចិត្តអ៊ីមែល', + 'created_invoices' => 'បានបង្កើតវិក្កយបត្រ :count ដោយជោគជ័យ', + 'next_invoice_number' => 'លេខវិក្កយបត្របន្ទាប់គឺ :number ។', + 'next_quote_number' => 'លេខសម្រង់បន្ទាប់គឺ :number ។', + 'days_before' => 'ថ្ងៃមុនគ', + 'days_after' => 'ថ្ងៃបន្ទាប់ពី', + 'field_due_date' => 'កាលបរិច្ឆេទកំណត់', + 'field_invoice_date' => 'កាលបរិច្ឆេទវិក័យប័ត្រ', + 'schedule' => 'កាលវិភាគ', + 'email_designs' => 'រចនាអ៊ីមែល', + 'assigned_when_sent' => 'ចាត់តាំងនៅពេលផ្ញើ', + 'white_label_purchase_link' => 'ទិញអាជ្ញាប័ណ្ណស្លាកពណ៌ស', + 'expense' => 'ចំណាយ', + 'expenses' => 'ការចំណាយ', + 'new_expense' => 'បញ្ចូលការចំណាយ', + 'new_vendor' => 'អ្នកលក់ថ្មី។', + 'payment_terms_net' => 'សុទ្ធ', + 'vendor' => 'អ្នកលក់', + 'edit_vendor' => 'កែសម្រួលអ្នកលក់', + 'archive_vendor' => 'បណ្ណសារអ្នកលក់', + 'delete_vendor' => 'លុបអ្នកលក់', + 'view_vendor' => 'មើលអ្នកលក់', + 'deleted_expense' => 'បានលុបការចំណាយដោយជោគជ័យ', + 'archived_expense' => 'បានរក្សាទុកការចំណាយដោយជោគជ័យ', + 'deleted_expenses' => 'បានលុបការចំណាយដោយជោគជ័យ', + 'archived_expenses' => 'បានរក្សាទុកការចំណាយដោយជោគជ័យ', + 'expense_amount' => 'ចំនួនទឹកប្រាក់ចំណាយ', + 'expense_balance' => 'សមតុល្យចំណាយ', + 'expense_date' => 'កាលបរិច្ឆេទចំណាយ', + 'expense_should_be_invoiced' => 'តើការចំណាយនេះគួរត្រូវបានចេញវិក្កយបត្រទេ?', + 'public_notes' => 'កំណត់ចំណាំសាធារណៈ', + 'invoice_amount' => 'ចំនួនទឹកប្រាក់វិក័យប័ត្រ', + 'exchange_rate' => 'អត្រាប្តូរប្រាក់', + 'yes' => 'បាទ', + 'no' => 'ទេ', + 'should_be_invoiced' => 'គួរតែត្រូវបានចេញវិក្កយបត្រ', + 'view_expense' => 'មើលការចំណាយ #:expense', + 'edit_expense' => 'កែសម្រួលការចំណាយ', + 'archive_expense' => 'ការចំណាយលើប័ណ្ណសារ', + 'delete_expense' => 'លុបការចំណាយ', + 'view_expense_num' => 'ការចំណាយ #:expense', + 'updated_expense' => 'បានធ្វើបច្ចុប្បន្នភាពការចំណាយដោយជោគជ័យ', + 'created_expense' => 'បានបង្កើតការចំណាយដោយជោគជ័យ', + 'enter_expense' => 'បញ្ចូលការចំណាយ', + 'view' => 'មើល', + 'restore_expense' => 'ស្តារការចំណាយ', + 'invoice_expense' => 'ការចំណាយលើវិក្កយបត្រ', + 'expense_error_multiple_clients' => 'ការចំណាយមិនអាចជារបស់អតិថិជនផ្សេងគ្នាបានទេ។', + 'expense_error_invoiced' => 'ការចំណាយត្រូវបានចេញវិក្កយបត្ររួចហើយ', + 'convert_currency' => 'បម្លែងរូបិយប័ណ្ណ', + 'num_days' => 'ចំនួនថ្ងៃ', + 'create_payment_term' => 'បង្កើតលក្ខខណ្ឌបង់ប្រាក់', + 'edit_payment_terms' => 'កែសម្រួលលក្ខខណ្ឌបង់ប្រាក់', + 'edit_payment_term' => 'កែសម្រួលលក្ខខណ្ឌបង់ប្រាក់', + 'archive_payment_term' => 'ទុកក្នុងប័ណ្ណសាររយៈពេលបង់ប្រាក់', + 'recurring_due_dates' => 'កាលបរិច្ឆេទទូទាត់វិក្កយបត្របន្ត', + 'recurring_due_date_help' => 'កំណត់កាលបរិច្ឆេទកំណត់សម្រាប់វិក្កយបត្រដោយស្វ័យប្រវត្តិ។
វិក្កយបត្រនៅលើវដ្តប្រចាំខែ ឬប្រចាំឆ្នាំដែលបានកំណត់ឱ្យដល់កំណត់នៅ ឬមុនថ្ងៃដែលពួកគេត្រូវបានបង្កើតនឹងត្រូវដល់ខែបន្ទាប់។ វិក្កយបត្រដែលបានកំណត់ត្រូវដល់ថ្ងៃទី 29 ឬ 30 ក្នុងខែដែលមិនមានថ្ងៃនោះនឹងដល់ថ្ងៃចុងក្រោយនៃខែ។
វិក្កយបត្រនៅលើវដ្តប្រចាំសប្តាហ៍ដែលត្រូវបានកំណត់នឹងត្រូវផុតនៅថ្ងៃនៃសប្តាហ៍ដែលពួកគេត្រូវបានបង្កើតនឹងត្រូវកំណត់នៅសប្តាហ៍បន្ទាប់។
ឧទាហរណ៍:
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' => 'អ៊ីមែលនឹងត្រូវបានផ្ញើជាមួយវិក្កយបត្រ PDF',
+ 'downloaded_quote' => 'អ៊ីមែលនឹងត្រូវបានផ្ញើជាមួយនឹងសម្រង់ PDF',
+ 'downloaded_invoices' => 'អ៊ីមែលនឹងត្រូវបានផ្ញើជាមួយវិក្កយបត្រ PDF',
+ 'downloaded_quotes' => 'អ៊ីមែលនឹងត្រូវបានផ្ញើជាមួយនឹងសម្រង់ PDFs',
+ 'clone_expense' => 'ការចំណាយក្លូន',
+ 'default_documents' => 'ឯកសារលំនាំដើម',
+ 'send_email_to_client' => 'ផ្ញើអ៊ីមែលទៅអតិថិជន',
+ 'refund_subject' => 'ការបង្វិលសងត្រូវបានដំណើរការ',
+ 'refund_body' => 'អ្នកត្រូវបានដំណើរការការបង្វិលសងនៃ :amount សម្រាប់វិក្កយបត្រ :invoice_number។',
+
+ 'currency_us_dollar' => 'ដុល្លារអាមេរិក',
+ 'currency_british_pound' => 'ផោនអង់គ្លេស',
+ 'currency_euro' => 'អឺរ៉ូ',
+ 'currency_south_african_rand' => 'Rand អាហ្វ្រិកខាងត្បូង',
+ 'currency_danish_krone' => 'ក្រូនដាណឺម៉ាក',
+ 'currency_israeli_shekel' => 'អ៊ីស្រាអែល 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' => 'Norske Kroner',
+ 'currency_new_zealand_dollar' => 'ដុល្លារនូវែលសេឡង់',
+ 'currency_vietnamese_dong' => 'វៀតណាមដុង',
+ 'currency_swiss_franc' => 'ហ្វ្រង់ស្វីស',
+ 'currency_guatemalan_quetzal' => 'ហ្គាតេម៉ាឡា Quetzal',
+ 'currency_malaysian_ringgit' => 'រីងហ្គីតម៉ាឡេស៊ី',
+ 'currency_brazilian_real' => 'ប្រេស៊ីល Real',
+ 'currency_thai_baht' => 'ប្រាក់បាត',
+ 'currency_nigerian_naira' => 'Naira នីហ្សេរីយ៉ា',
+ 'currency_argentine_peso' => 'អាហ្សង់ទីន ប៉េសូ',
+ 'currency_bangladeshi_taka' => 'តាកាបង់ក្លាដែស',
+ 'currency_united_arab_emirates_dirham' => 'អេមីរ៉ាតអារ៉ាប់រួម 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' => 'ហូឡង់ Antillean Guilder',
+ 'currency_trinidad_and_tobago_dollar' => 'ប្រាក់ដុល្លារទ្រីនីដាដ និងតូបាហ្គោ',
+ 'currency_east_caribbean_dollar' => 'ដុល្លារការាបៀនខាងកើត',
+ 'currency_ghanaian_cedi' => 'ស៊ីឌី ហ្គាណា',
+ 'currency_bulgarian_lev' => 'លីវប៊ុលហ្គារី',
+ 'currency_aruban_florin' => 'Aruban Florin',
+ 'currency_turkish_lira' => 'លីរ៉ាទួរគី',
+ 'currency_romanian_new_leu' => 'រ៉ូម៉ានី ញូវ លូ',
+ 'currency_croatian_kuna' => 'ក្រូអាត Kuna',
+ 'currency_saudi_riyal' => 'អារ៉ាប៊ីសាអូឌីត Riyal',
+ 'currency_japanese_yen' => 'យ៉េនជប៉ុន',
+ 'currency_maldivian_rufiyaa' => 'ម៉ាល់ឌីវ រូហ្វីយ៉ា',
+ 'currency_costa_rican_colon' => 'Colón កូស្តារីកា',
+ 'currency_pakistani_rupee' => 'ប្រាក់រូពីប៉ាគីស្ថាន',
+ 'currency_polish_zloty' => 'ប៉ូឡូញ Zloty',
+ 'currency_sri_lankan_rupee' => 'ប្រាក់រូពីស្រីលង្កា',
+ 'currency_czech_koruna' => 'ឆេកកូរូណា',
+ 'currency_uruguayan_peso' => 'អ៊ុយរូហ្គាយ ប៉េសូ',
+ 'currency_namibian_dollar' => 'ប្រាក់ដុល្លារណាមីប៊ី',
+ 'currency_tunisian_dinar' => 'ឌីណាទុយនីស៊ី',
+ 'currency_russian_ruble' => 'រូបិយបណ្ណរុស្ស៊ី',
+ 'currency_mozambican_metical' => 'ម៉ូសំប៊ិក Metical',
+ 'currency_omani_rial' => 'អូម៉ានី រីយ៉ាល់',
+ 'currency_ukrainian_hryvnia' => 'Hryvnia អ៊ុយក្រែន',
+ 'currency_macanese_pataca' => 'Macanese ប៉ាតាកា',
+ 'currency_taiwan_new_dollar' => 'ប្រាក់ដុល្លារតៃវ៉ាន់ថ្មី។',
+ 'currency_dominican_peso' => 'ដូមីនិក ប៉េសូ',
+ 'currency_chilean_peso' => 'ប៉េសូឈីលី',
+ 'currency_icelandic_krona' => 'ក្រុណាអ៊ីស្លង់',
+ 'currency_papua_new_guinean_kina' => 'ប៉ាពួញូហ្គីណេ គីណា',
+ 'currency_jordanian_dinar' => 'ហ្សកដានី ឌីណា',
+ 'currency_myanmar_kyat' => 'មីយ៉ាន់ម៉ា Kyat',
+ 'currency_peruvian_sol' => 'ប៉េរូសូល។',
+ 'currency_botswana_pula' => 'បូតស្វាណា ពូឡា',
+ 'currency_hungarian_forint' => 'ហុងគ្រី Forint',
+ 'currency_ugandan_shilling' => 'អ៊ូហ្គង់ដា ស៊ីលលីង',
+ 'currency_barbadian_dollar' => 'ដុល្លារ Barbadian',
+ 'currency_brunei_dollar' => 'ដុល្លារប្រ៊ុយណេ',
+ 'currency_georgian_lari' => 'ហ្សកហ្ស៊ីឡារី',
+ 'currency_qatari_riyal' => 'កាតារីយ៉ាល់',
+ 'currency_honduran_lempira' => 'ហុងឌូរ៉ាន់ ឡមប្រារ៉ា',
+ 'currency_surinamese_dollar' => 'ប្រាក់ដុល្លារ Surinamese',
+ 'currency_bahraini_dinar' => 'ឌីណា បារ៉ែន',
+ 'currency_venezuelan_bolivars' => 'វ៉េណេស៊ុយអេឡា បូលីវ៉ារ',
+ 'currency_south_korean_won' => 'ប្រាក់វ៉ុនរបស់កូរ៉េខាងត្បូង',
+ 'currency_moroccan_dirham' => 'ម៉ារ៉ុក ដាហាម',
+ 'currency_jamaican_dollar' => 'ដុល្លារហ្សាម៉ាអ៊ីក',
+ 'currency_angolan_kwanza' => 'អង់ហ្គោឡា ក្វាន់ហ្សា',
+ 'currency_haitian_gourde' => 'ហ្គ័រដឺ ហៃទី',
+ 'currency_zambian_kwacha' => 'ហ្សំប៊ី ក្វាចា',
+ 'currency_nepalese_rupee' => 'ប្រាក់រូពីនេប៉ាល់',
+ 'currency_cfp_franc' => 'ហ្វ្រង់ CFP',
+ 'currency_mauritian_rupee' => 'ប្រាក់រូពីប្រទេសម៉ូរីស',
+ 'currency_cape_verdean_escudo' => 'Cape Verdean Escudo',
+ 'currency_kuwaiti_dinar' => 'ឌីណាគុយវ៉ែត',
+ 'currency_algerian_dinar' => 'ឌីណា អាល់ហ្សេរី',
+ 'currency_macedonian_denar' => 'ម៉ាសេដូនៀ ដេណា',
+ 'currency_fijian_dollar' => 'ដុល្លារហ្វីជី',
+ 'currency_bolivian_boliviano' => 'បូលីវី បូលីវីណូ',
+ 'currency_albanian_lek' => 'ឡេក អាល់បានី',
+ 'currency_serbian_dinar' => 'ស៊ែប៊ី ឌីណា',
+ 'currency_lebanese_pound' => 'ផោនលីបង់',
+ 'currency_armenian_dram' => 'អាមេនី Dram',
+ 'currency_azerbaijan_manat' => 'ម៉ាណាត អាស៊ែបៃហ្សង់',
+ 'currency_bosnia_and_herzegovina_convertible_mark' => 'បូស្នៀ និងហឺហ្សេហ្គោវីណា ម៉ាកដែលអាចបំលែងបាន។',
+ 'currency_belarusian_ruble' => 'រូបីបេឡារុស្ស',
+ 'currency_moldovan_leu' => 'ម៉ុលដាវ៉ាន់ លូ',
+ 'currency_kazakhstani_tenge' => 'កាហ្សាក់ស្ថាន Tenge',
+ 'currency_gibraltar_pound' => 'ផោនហ្គីប្រាលតា',
+
+ 'currency_gambia_dalasi' => 'ហ្គាំប៊ី ដាឡាស៊ី',
+ 'currency_paraguayan_guarani' => 'ប៉ារ៉ាហ្គាយហ្គារ៉ានី',
+ 'currency_malawi_kwacha' => 'ម៉ាឡាវី ក្វាចា',
+ 'currency_zimbabwean_dollar' => 'ដុល្លារហ្ស៊ីមបាវេ',
+ 'currency_cambodian_riel' => 'ប្រាក់រៀលខ្មែរ',
+ 'currency_vanuatu_vatu' => 'វ៉ានូអាទូ វ៉ាទូ',
+
+ 'currency_cuban_peso' => 'ប្រាក់ប៉េសូគុយបា',
+ 'currency_bz_dollar' => 'ដុល្លារ BZ',
+
+ 'review_app_help' => 'យើងសង្ឃឹមថាអ្នករីករាយនឹងការប្រើប្រាស់កម្មវិធី។:domain
ជាដែនក្នុង :link។',
+ 'apple_pay_not_supported' => 'សូមអភ័យទោស Apple/Google Pay មិនត្រូវបានគាំទ្រដោយកម្មវិធីរុករកតាមអ៊ីនធឺណិតរបស់អ្នកទេ។',
+ 'optional_payment_methods' => 'វិធីសាស្រ្តទូទាត់ស្រេចចិត្ត',
+ 'add_subscription' => 'បន្ថែមការជាវ',
+ 'target_url' => 'គោលដៅ',
+ 'target_url_help' => 'នៅពេលដែលព្រឹត្តិការណ៍ដែលបានជ្រើសរើសកើតឡើង កម្មវិធីនឹងបង្ហោះធាតុទៅ URL គោលដៅ។',
+ 'event' => 'ព្រឹត្តិការណ៍',
+ 'subscription_event_1' => 'អតិថិជនដែលបានបង្កើត',
+ 'subscription_event_2' => 'បានបង្កើតវិក្កយបត្រ',
+ 'subscription_event_3' => 'បានបង្កើតសម្រង់',
+ 'subscription_event_4' => 'បានបង្កើតការទូទាត់',
+ 'subscription_event_5' => 'បានបង្កើតអ្នកលក់',
+ 'subscription_event_6' => 'សម្រង់ដែលបានធ្វើបច្ចុប្បន្នភាព',
+ 'subscription_event_7' => 'បានលុបសម្រង់',
+ 'subscription_event_8' => 'វិក្កយបត្រដែលបានធ្វើបច្ចុប្បន្នភាព',
+ 'subscription_event_9' => 'វិក្កយបត្រដែលបានលុប',
+ 'subscription_event_10' => 'អតិថិជនដែលបានធ្វើបច្ចុប្បន្នភាព',
+ 'subscription_event_11' => 'អតិថិជនដែលបានលុប',
+ 'subscription_event_12' => 'ការទូទាត់ដែលបានលុប',
+ 'subscription_event_13' => 'បានធ្វើបច្ចុប្បន្នភាពអ្នកលក់',
+ 'subscription_event_14' => 'អ្នកលក់ដែលបានលុប',
+ 'subscription_event_15' => 'ការចំណាយដែលបានបង្កើត',
+ 'subscription_event_16' => 'ចំណាយដែលបានធ្វើបច្ចុប្បន្នភាព',
+ 'subscription_event_17' => 'ការចំណាយដែលបានលុប',
+ 'subscription_event_18' => 'បានបង្កើតកិច្ចការ',
+ 'subscription_event_19' => 'កិច្ចការដែលបានធ្វើបច្ចុប្បន្នភាព',
+ 'subscription_event_20' => 'កិច្ចការដែលបានលុប',
+ 'subscription_event_21' => 'សម្រង់ដែលបានអនុម័ត',
+ 'subscriptions' => 'ការជាវ',
+ 'updated_subscription' => 'បានធ្វើបច្ចុប្បន្នភាពការជាវដោយជោគជ័យ',
+ 'created_subscription' => 'បានបង្កើតការជាវដោយជោគជ័យ',
+ 'edit_subscription' => 'កែសម្រួលការជាវ',
+ 'archive_subscription' => 'ការជាវបណ្ណសារ',
+ 'archived_subscription' => 'បានរក្សាទុកការជាវដោយជោគជ័យ',
+ 'project_error_multiple_clients' => 'គម្រោងមិនអាចជារបស់អតិថិជនផ្សេងគ្នាទេ។',
+ 'invoice_project' => 'គម្រោងវិក្កយបត្រ',
+ 'module_recurring_invoice' => 'វិក្កយបត្របន្ត',
+ 'module_credit' => 'ឥណទាន',
+ 'module_quote' => 'សម្រង់ & សំណើ',
+ 'module_task' => 'កិច្ចការ និងគម្រោង',
+ 'module_expense' => 'ការចំណាយ & អ្នកលក់',
+ 'module_ticket' => 'សំបុត្រ',
+ 'reminders' => 'ការរំលឹក',
+ 'send_client_reminders' => 'ផ្ញើអ៊ីមែលរំលឹក',
+ 'can_view_tasks' => 'កិច្ចការអាចមើលឃើញនៅក្នុងវិបផតថល។',
+ 'is_not_sent_reminders' => 'ការរំលឹកមិនត្រូវបានផ្ញើទេ។',
+ 'promotion_footer' => 'ការផ្សព្វផ្សាយរបស់អ្នកនឹងផុតកំណត់ក្នុងពេលឆាប់ៗនេះ :link ដើម្បីដំឡើងកំណែឥឡូវនេះ។',
+ 'unable_to_delete_primary' => 'ចំណាំ៖ ដើម្បីលុបក្រុមហ៊ុននេះជាមុនសិន លុបក្រុមហ៊ុនដែលបានភ្ជាប់ទាំងអស់។',
+ 'please_register' => 'សូមចុះឈ្មោះគណនីរបស់អ្នក។',
+ 'processing_request' => 'ដំណើរការសំណើ',
+ 'mcrypt_warning' => 'ការព្រមាន៖ Mcrypt ត្រូវបានបដិសេធ ដំណើរការ :command ដើម្បីធ្វើបច្ចុប្បន្នភាពកូដសម្ងាត់របស់អ្នក។',
+ 'edit_times' => 'កែសម្រួលពេលវេលា',
+ 'inclusive_taxes_help' => 'រួមបញ្ចូល ពន្ធក្នុងការចំណាយ',
+ 'inclusive_taxes_notice' => 'ការកំណត់នេះមិនអាចផ្លាស់ប្តូរបានទេ នៅពេលដែលវិក្កយបត្រត្រូវបានបង្កើត។',
+ 'inclusive_taxes_warning' => 'ការព្រមាន៖ វិក្កយបត្រដែលមានស្រាប់នឹងត្រូវរក្សាទុកឡើងវិញ',
+ 'copy_shipping' => 'ចម្លងការដឹកជញ្ជូន',
+ 'copy_billing' => 'ចម្លងវិក្កយបត្រ',
+ 'quote_has_expired' => 'សម្រង់បានផុតកំណត់ សូមទាក់ទងពាណិជ្ជករ។',
+ 'empty_table_footer' => 'បង្ហាញ 0 ទៅ 0 នៃ 0 ធាតុ',
+ 'do_not_trust' => 'កុំចាំឧបករណ៍នេះ។',
+ 'trust_for_30_days' => 'ជឿជាក់រយៈពេល 30 ថ្ងៃ។',
+ 'trust_forever' => 'ជឿជាក់ជារៀងរហូត',
+ 'kanban' => 'កាន់បាន',
+ 'backlog' => 'Backlog',
+ 'ready_to_do' => 'រួចរាល់ដើម្បីធ្វើ',
+ 'in_progress' => 'កំពុងដំណើរការ',
+ 'add_status' => 'បន្ថែមស្ថានភាព',
+ 'archive_status' => 'ស្ថានភាពបណ្ណសារ',
+ 'new_status' => 'ស្ថានភាពថ្មី។',
+ 'convert_products' => 'បម្លែងផលិតផល',
+ 'convert_products_help' => 'បម្លែងតម្លៃផលិតផលដោយស្វ័យប្រវត្តិទៅជារូបិយប័ណ្ណរបស់អតិថិជន',
+ 'improve_client_portal_link' => 'កំណត់ដែនរងដើម្បីកាត់បន្ថយតំណភ្ជាប់វិបផតថលអតិថិជន។',
+ 'budgeted_hours' => 'ម៉ោងដែលបានកំណត់',
+ 'progress' => 'វឌ្ឍនភាព',
+ 'view_project' => 'មើលគម្រោង',
+ 'summary' => 'សង្ខេប',
+ 'endless_reminder' => 'ការរំលឹកគ្មានទីបញ្ចប់',
+ 'signature_on_invoice_help' => 'បន្ថែមកូដខាងក្រោមដើម្បីបង្ហាញហត្ថលេខារបស់អតិថិជនរបស់អ្នកនៅលើ PDF ។',
+ 'signature_on_pdf' => 'បង្ហាញនៅលើ PDF',
+ 'signature_on_pdf_help' => 'បង្ហាញហត្ថលេខាអតិថិជននៅលើវិក្កយបត្រ/សម្រង់ PDF ។',
+ 'expired_white_label' => 'អាជ្ញាប័ណ្ណស្លាកពណ៌សបានផុតកំណត់ហើយ។',
+ 'return_to_login' => 'ត្រឡប់ទៅ ចូល',
+ 'convert_products_tip' => 'ចំណាំ៖ បន្ថែម :link ដែលមានឈ្មោះថា ":name" ដើម្បីមើលអត្រាប្តូរប្រាក់។',
+ 'amount_greater_than_balance' => 'ចំនួននេះធំជាងសមតុល្យវិក្កយបត្រ ឥណទាននឹងត្រូវបានបង្កើតជាមួយនឹងចំនួនដែលនៅសល់។',
+ 'custom_fields_tip' => 'ប្រើ Label|Option1,Option2
ដើម្បីបង្ហាញប្រអប់ជ្រើសរើស។',
+ 'client_information' => 'ព័ត៌មានអតិថិជន',
+ 'updated_client_details' => 'បានធ្វើបច្ចុប្បន្នភាពព័ត៌មានលម្អិតអតិថិជនដោយជោគជ័យ',
+ 'auto' => 'ស្វ័យប្រវត្តិ',
+ 'tax_amount' => 'ចំនួនទឹកប្រាក់ពន្ធ',
+ 'tax_paid' => 'បង់ពន្ធ',
+ 'none' => 'គ្មាន',
+ 'proposal_message_button' => 'ដើម្បីមើលសំណើររបស់អ្នកសម្រាប់ :amount សូមចុចប៊ូតុងខាងក្រោម។',
+ 'proposal' => 'សំណើ',
+ 'proposals' => 'សំណើ',
+ 'list_proposals' => 'រាយបញ្ជីសំណើ',
+ 'new_proposal' => 'សំណើថ្មី។',
+ 'edit_proposal' => 'កែសម្រួលសំណើ',
+ 'archive_proposal' => 'បណ្ណសារសំណើ',
+ 'delete_proposal' => 'លុបសំណើ',
+ 'created_proposal' => 'បង្កើតសំណើដោយជោគជ័យ',
+ 'updated_proposal' => 'បានធ្វើបច្ចុប្បន្នភាពសំណើដោយជោគជ័យ',
+ 'archived_proposal' => 'បានរក្សាទុកសំណើដោយជោគជ័យ',
+ 'deleted_proposal' => 'បានរក្សាទុកសំណើដោយជោគជ័យ',
+ 'archived_proposals' => 'បានរក្សាទុកសំណើ :count ដោយជោគជ័យ',
+ 'deleted_proposals' => 'បានរក្សាទុកសំណើ :count ដោយជោគជ័យ',
+ 'restored_proposal' => 'បានស្ដារសំណើឡើងវិញដោយជោគជ័យ',
+ 'restore_proposal' => 'ស្តារសំណើ',
+ 'snippet' => 'អត្ថបទខ្លីៗ',
+ 'snippets' => 'អត្ថបទខ្លីៗ',
+ 'proposal_snippet' => 'អត្ថបទខ្លីៗ',
+ 'proposal_snippets' => 'អត្ថបទខ្លីៗ',
+ 'new_proposal_snippet' => 'អត្ថបទខ្លីៗថ្មី។',
+ 'edit_proposal_snippet' => 'កែសម្រួលអត្ថបទ',
+ 'archive_proposal_snippet' => 'បណ្តុំព័ត៌មានក្នុងប័ណ្ណសារ',
+ 'delete_proposal_snippet' => 'លុបអត្ថបទ',
+ 'created_proposal_snippet' => 'បានបង្កើតអត្ថបទដោយជោគជ័យ',
+ 'updated_proposal_snippet' => 'បានធ្វើបច្ចុប្បន្នភាពអត្ថបទដោយជោគជ័យ',
+ 'archived_proposal_snippet' => 'បានទុកភាគខ្លីក្នុងប័ណ្ណសារដោយជោគជ័យ',
+ 'deleted_proposal_snippet' => 'បានទុកភាគខ្លីក្នុងប័ណ្ណសារដោយជោគជ័យ',
+ 'archived_proposal_snippets' => 'បានទុកព័ត៌មានខ្លីៗ :count ដោយជោគជ័យ',
+ 'deleted_proposal_snippets' => 'បានទុកព័ត៌មានខ្លីៗ :count ដោយជោគជ័យ',
+ 'restored_proposal_snippet' => 'បានស្ដារអត្ថបទដោយជោគជ័យ',
+ 'restore_proposal_snippet' => 'ស្ដារព័ត៌មានសង្ខេប',
+ 'template' => 'គំរូ',
+ 'templates' => 'គំរូ',
+ 'proposal_template' => 'គំរូ',
+ 'proposal_templates' => 'គំរូ',
+ 'new_proposal_template' => 'គំរូថ្មី។',
+ 'edit_proposal_template' => 'កែសម្រួលគំរូ',
+ 'archive_proposal_template' => 'បណ្ណសារគំរូ',
+ 'delete_proposal_template' => 'លុបគំរូ',
+ 'created_proposal_template' => 'បង្កើតគំរូដោយជោគជ័យ',
+ 'updated_proposal_template' => 'បានធ្វើបច្ចុប្បន្នភាពគំរូដោយជោគជ័យ',
+ 'archived_proposal_template' => 'ពុម្ពដែលបានទុកក្នុងប័ណ្ណសារដោយជោគជ័យ',
+ 'deleted_proposal_template' => 'ពុម្ពដែលបានទុកក្នុងប័ណ្ណសារដោយជោគជ័យ',
+ 'archived_proposal_templates' => 'បានរក្សាទុកគំរូ :count ដោយជោគជ័យ',
+ 'deleted_proposal_templates' => 'បានរក្សាទុកគំរូ :count ដោយជោគជ័យ',
+ 'restored_proposal_template' => 'បានស្ដារគំរូដោយជោគជ័យ',
+ 'restore_proposal_template' => 'ស្តារគំរូ',
+ 'proposal_category' => 'ប្រភេទ',
+ 'proposal_categories' => 'ប្រភេទ',
+ 'new_proposal_category' => 'ប្រភេទថ្មី។',
+ 'edit_proposal_category' => 'កែសម្រួលប្រភេទ',
+ 'archive_proposal_category' => 'ប្រភេទបណ្ណសារ',
+ 'delete_proposal_category' => 'លុបប្រភេទ',
+ 'created_proposal_category' => 'ប្រភេទដែលបានបង្កើតដោយជោគជ័យ',
+ 'updated_proposal_category' => 'បានធ្វើបច្ចុប្បន្នភាពប្រភេទដោយជោគជ័យ',
+ 'archived_proposal_category' => 'ប្រភេទដែលបានទុកក្នុងប័ណ្ណសារដោយជោគជ័យ',
+ 'deleted_proposal_category' => 'ប្រភេទដែលបានទុកក្នុងប័ណ្ណសារដោយជោគជ័យ',
+ 'archived_proposal_categories' => 'បានរក្សាទុកប្រភេទ :count ដោយជោគជ័យ',
+ 'deleted_proposal_categories' => 'បានរក្សាទុកប្រភេទ :count ដោយជោគជ័យ',
+ 'restored_proposal_category' => 'ប្រភេទដែលបានស្ដារឡើងវិញដោយជោគជ័យ',
+ 'restore_proposal_category' => 'ស្ដារប្រភេទ',
+ 'delete_status' => 'លុបស្ថានភាព',
+ 'standard' => 'ស្តង់ដារ',
+ 'icon' => 'រូបតំណាង',
+ 'proposal_not_found' => 'សំណើដែលបានស្នើមិនមានទេ។',
+ 'create_proposal_category' => 'បង្កើតប្រភេទ',
+ 'clone_proposal_template' => 'គំរូក្លូន',
+ 'proposal_email' => 'អ៊ីមែលសំណើ',
+ 'proposal_subject' => 'សំណើថ្មី :number ពី :account',
+ 'proposal_message' => 'ដើម្បីមើលសំណើររបស់អ្នកសម្រាប់ :amount សូមចុចតំណខាងក្រោម។',
+ 'emailed_proposal' => 'បានផ្ញើសំណើដោយជោគជ័យតាមអ៊ីមែល',
+ 'load_template' => 'ផ្ទុកគំរូ',
+ 'no_assets' => 'គ្មានរូបភាព អូសដើម្បីបង្ហោះ',
+ 'add_image' => 'បន្ថែមរូបភាព',
+ 'select_image' => 'ជ្រើសរើសរូបភាព',
+ 'upgrade_to_upload_images' => 'ដំឡើងកំណែទៅផែនការសហគ្រាសដើម្បីបង្ហោះរូបភាព',
+ 'delete_image' => 'លុបរូបភាព',
+ 'delete_image_help' => 'ការព្រមាន៖ ការលុបរូបភាពនឹងលុបវាចេញពីសំណើទាំងអស់។',
+ 'amount_variable_help' => 'ចំណាំ៖ វាលវិក្កយបត្រ $amount នឹងប្រើផ្នែកខ្លះ/កន្លែងដាក់ប្រាក់ ប្រសិនបើកំណត់បើមិនដូច្នេះទេ វានឹងប្រើសមតុល្យវិក្កយបត្រ។',
+ 'taxes_are_included_help' => 'ចំណាំ៖ ពន្ធរួមបញ្ចូលត្រូវបានបើក។',
+ 'taxes_are_not_included_help' => 'ចំណាំ៖ ពន្ធរួមបញ្ចូលមិនត្រូវបានបើកទេ។',
+ 'change_requires_purge' => 'ការផ្លាស់ប្តូរការកំណត់នេះតម្រូវឱ្យមាន :link ទិន្នន័យគណនី។',
+ 'purging' => 'ការបោសសំអាត',
+ 'warning_local_refund' => 'ការសងប្រាក់វិញនឹងត្រូវបានកត់ត្រានៅក្នុងកម្មវិធី ប៉ុន្តែនឹងមិនត្រូវបានដំណើរការដោយច្រកផ្លូវបង់ប្រាក់នោះទេ។',
+ 'email_address_changed' => 'អាសយដ្ឋានអ៊ីមែលត្រូវបានផ្លាស់ប្តូរ',
+ 'email_address_changed_message' => 'អាសយដ្ឋានអ៊ីមែលសម្រាប់គណនីរបស់អ្នកត្រូវបានផ្លាស់ប្តូរពី :old_email ទៅ :new_email ។',
+ 'test' => 'សាកល្បង',
+ 'beta' => 'បេតា',
+ 'gmp_required' => 'ការនាំចេញទៅ ZIP ទាមទារផ្នែកបន្ថែម GMP',
+ 'email_history' => 'ប្រវត្តិអ៊ីមែល',
+ 'loading' => 'កំពុងផ្ទុក',
+ 'no_messages_found' => 'រកមិនឃើញសារទេ។',
+ 'processing' => 'ដំណើរការ',
+ 'reactivate' => 'ដំណើរការឡើងវិញ',
+ 'reactivated_email' => 'អាសយដ្ឋានអ៊ីមែលត្រូវបានដំណើរការឡើងវិញ',
+ 'emails' => 'អ៊ីមែល',
+ 'opened' => 'បានបើក',
+ 'bounced' => 'លោត',
+ 'total_sent' => 'សរុបបានផ្ញើ',
+ 'total_opened' => 'សរុបបានបើក',
+ 'total_bounced' => 'សរុបបានលោតឡើង',
+ 'total_spam' => 'សារឥតបានការសរុប',
+ 'platforms' => 'វេទិកា',
+ 'email_clients' => 'អតិថិជនអ៊ីមែល',
+ 'mobile' => 'ទូរស័ព្ទចល័ត',
+ 'desktop' => 'ផ្ទៃតុ',
+ 'webmail' => 'អ៊ីមែល',
+ 'group' => 'ក្រុម',
+ 'subgroup' => 'ក្រុមរង',
+ 'unset' => 'មិនបានកំណត់',
+ 'received_new_payment' => 'អ្នកបានទទួលការបង់ប្រាក់ថ្មី!',
+ 'slack_webhook_help' => 'ទទួលបានការជូនដំណឹងអំពីការទូទាត់ដោយប្រើ :link ។',
+ 'slack_incoming_webhooks' => 'រុញ webhooks ចូល',
+ 'accept' => 'ទទួលយក',
+ 'accepted_terms' => 'បានទទួលយកលក្ខខណ្ឌប្រើប្រាស់ចុងក្រោយដោយជោគជ័យ',
+ 'invalid_url' => 'URL មិនត្រឹមត្រូវ',
+ 'workflow_settings' => 'ការកំណត់លំហូរការងារ',
+ 'auto_email_invoice' => 'អ៊ីមែលស្វ័យប្រវត្តិ',
+ 'auto_email_invoice_help' => 'ផ្ញើអ៊ីមែលដោយស្វ័យប្រវត្តិនូវវិក្កយបត្រដែលកើតឡើងដដែលៗនៅពេលបង្កើត។',
+ 'auto_archive_invoice' => 'បណ្ណសារស្វ័យប្រវត្តិ',
+ 'auto_archive_invoice_help' => 'រក្សាទុកវិក្កយបត្រដោយស្វ័យប្រវត្តិនៅពេលបង់ប្រាក់។',
+ 'auto_archive_quote' => 'បណ្ណសារស្វ័យប្រវត្តិ',
+ 'auto_archive_quote_help' => 'រក្សាទុកសម្រង់ដោយស្វ័យប្រវត្តិនៅពេលបំប្លែងទៅជាវិក្កយបត្រ។',
+ 'require_approve_quote' => 'ទាមទារការអនុម័តសម្រង់',
+ 'require_approve_quote_help' => 'តម្រូវឱ្យអតិថិជនយល់ព្រមលើការដកស្រង់។',
+ 'allow_approve_expired_quote' => 'អនុញ្ញាតឱ្យអនុម័តការដកស្រង់ដែលផុតកំណត់',
+ 'allow_approve_expired_quote_help' => 'អនុញ្ញាតឱ្យអតិថិជនយល់ព្រមលើសម្រង់ដែលផុតកំណត់។',
+ 'invoice_workflow' => 'វិក្កយបត្រការងារ',
+ 'quote_workflow' => 'សម្រង់លំហូរការងារ',
+ 'client_must_be_active' => 'កំហុស៖ ម៉ាស៊ីនភ្ញៀវត្រូវតែសកម្ម',
+ 'purge_client' => 'សម្អាតអតិថិជន',
+ 'purged_client' => 'បានសម្អាតអតិថិជនដោយជោគជ័យ',
+ 'purge_client_warning' => 'រាល់កំណត់ត្រាដែលពាក់ព័ន្ធ (វិក្កយបត្រ កិច្ចការ ការចំណាយ ឯកសារ។ល។) ក៏នឹងត្រូវបានលុបផងដែរ។',
+ 'clone_product' => 'ផលិតផលក្លូន',
+ 'item_details' => 'ព័ត៌មានលម្អិតអំពីធាតុ',
+ 'send_item_details_help' => 'ផ្ញើព័ត៌មានលម្អិតអំពីធាតុបន្ទាត់ទៅកាន់ច្រកទូទាត់។',
+ 'view_proposal' => 'មើលសំណើ',
+ 'view_in_portal' => 'មើលក្នុងវិបផតថល។',
+ 'cookie_message' => 'គេហទំព័រនេះប្រើខូឃី ដើម្បីធានាថាអ្នកទទួលបានបទពិសោធន៍ល្អបំផុតនៅលើគេហទំព័ររបស់យើង។',
+ 'got_it' => 'យល់ហើយ!',
+ 'vendor_will_create' => 'អ្នកលក់នឹងត្រូវបានបង្កើតឡើង',
+ 'vendors_will_create' => 'អ្នកលក់នឹងត្រូវបានបង្កើតឡើង',
+ 'created_vendors' => 'បានបង្កើតអ្នកលក់ :count ដោយជោគជ័យ',
+ 'import_vendors' => 'អ្នកលក់នាំចូល',
+ 'company' => 'ក្រុមហ៊ុន',
+ 'client_field' => 'វាលអតិថិជន',
+ 'contact_field' => 'វាលទំនាក់ទំនង',
+ 'product_field' => 'វាលផលិតផល',
+ 'task_field' => 'វាលកិច្ចការ',
+ 'project_field' => 'វាលគម្រោង',
+ 'expense_field' => 'វាលចំណាយ',
+ 'vendor_field' => 'វាលអ្នកលក់',
+ 'company_field' => 'វាលក្រុមហ៊ុន',
+ 'invoice_field' => 'វាលវិក្កយបត្រ',
+ 'invoice_surcharge' => 'វិក័យប័ត្របន្ថែម',
+ 'custom_task_fields_help' => 'បន្ថែមវាលមួយនៅពេលបង្កើតកិច្ចការ។',
+ 'custom_project_fields_help' => 'បន្ថែមវាលមួយនៅពេលបង្កើតគម្រោង។',
+ 'custom_expense_fields_help' => 'បន្ថែមវាលមួយនៅពេលបង្កើតការចំណាយ។',
+ 'custom_vendor_fields_help' => 'បន្ថែមវាលមួយនៅពេលបង្កើតអ្នកលក់។',
+ 'messages' => 'សារ',
+ 'unpaid_invoice' => 'វិក្កយបត្រមិនទាន់បង់ប្រាក់',
+ 'paid_invoice' => 'វិក្កយបត្របង់ប្រាក់',
+ 'unapproved_quote' => 'សម្រង់ដែលមិនបានអនុម័ត',
+ 'unapproved_proposal' => 'សំណើដែលមិនបានអនុម័ត',
+ 'autofills_city_state' => 'បំពេញទីក្រុង/រដ្ឋដោយស្វ័យប្រវត្តិ',
+ 'no_match_found' => 'រកមិនឃើញការប្រកួតទេ។',
+ 'password_strength' => 'ភាពខ្លាំងនៃពាក្យសម្ងាត់',
+ 'strength_weak' => 'ខ្សោយ',
+ 'strength_good' => 'ល្អ',
+ 'strength_strong' => 'ខ្លាំង',
+ 'mark' => 'ម៉ាក',
+ 'updated_task_status' => 'ធ្វើបច្ចុប្បន្នភាពស្ថានភាពកិច្ចការដោយជោគជ័យ',
+ 'background_image' => 'រូបភាពផ្ទៃខាងក្រោយ',
+ 'background_image_help' => 'ប្រើ :link ដើម្បីគ្រប់គ្រងរូបភាពរបស់អ្នក យើងសូមណែនាំឱ្យប្រើឯកសារតូចមួយ។',
+ 'proposal_editor' => 'កម្មវិធីនិពន្ធសំណើ',
+ 'background' => 'ផ្ទៃខាងក្រោយ',
+ 'guide' => 'មគ្គុទ្ទេសក៍',
+ 'gateway_fee_item' => 'ធាតុថ្លៃសេវាច្រកផ្លូវ',
+ 'gateway_fee_description' => 'ថ្លៃបន្ថែមលើច្រកផ្លូវ',
+ 'gateway_fee_discount_description' => 'ការបញ្ចុះតម្លៃថ្លៃសេវាច្រកផ្លូវ',
+ 'show_payments' => 'បង្ហាញការទូទាត់',
+ 'show_aging' => 'បង្ហាញភាពចាស់',
+ 'reference' => 'ឯកសារយោង',
+ 'amount_paid' => 'ចំនួនទឹកប្រាក់ដែលត្រូវបង់',
+ 'send_notifications_for' => 'ផ្ញើការជូនដំណឹងសម្រាប់',
+ 'all_invoices' => 'វិក្កយបត្រទាំងអស់។',
+ 'my_invoices' => 'វិក្កយបត្ររបស់ខ្ញុំ',
+ 'payment_reference' => 'ឯកសារយោងការទូទាត់',
+ 'maximum' => 'អតិបរមា',
+ 'sort' => 'តម្រៀប',
+ 'refresh_complete' => 'ធ្វើឱ្យស្រស់ពេញលេញ',
+ 'please_enter_your_email' => 'សូមបញ្ចូលអ៊ីមែលរបស់អ្នក។',
+ 'please_enter_your_password' => 'សូមបញ្ចូលពាក្យសម្ងាត់របស់អ្នក',
+ 'please_enter_your_url' => 'សូមបញ្ចូល URL របស់អ្នក។',
+ 'please_enter_a_product_key' => 'សូមបញ្ចូលលេខកូដផលិតផល',
+ 'an_error_occurred' => 'កំហុសមួយបានកើតឡើង',
+ 'overview' => 'ទិដ្ឋភាពទូទៅ',
+ 'copied_to_clipboard' => 'បានចម្លង :value ទៅក្ដារតម្បៀតខ្ទាស់',
+ 'error' => 'កំហុស',
+ 'could_not_launch' => 'មិនអាចបើកដំណើរការបានទេ។',
+ 'additional' => 'បន្ថែម',
+ 'ok' => 'យល់ព្រម',
+ 'email_is_invalid' => 'អ៊ីមែលមិនត្រឹមត្រូវ។',
+ 'items' => 'ធាតុ',
+ 'partial_deposit' => 'ផ្នែក/ការដាក់ប្រាក់',
+ 'add_item' => 'បន្ថែមធាតុ',
+ 'total_amount' => 'ចំនួនសរុប',
+ 'pdf' => 'PDF',
+ 'invoice_status_id' => 'ស្ថានភាពវិក្កយបត្រ',
+ 'click_plus_to_add_item' => 'ចុច + ដើម្បីបន្ថែមធាតុ',
+ 'count_selected' => ':count បានជ្រើសរើស',
+ 'dismiss' => 'ច្រានចោល',
+ 'please_select_a_date' => 'សូមជ្រើសរើសកាលបរិច្ឆេទ',
+ 'please_select_a_client' => 'សូមជ្រើសរើសអតិថិជន',
+ 'language' => 'ភាសា',
+ 'updated_at' => 'បានធ្វើបច្ចុប្បន្នភាព',
+ 'please_enter_an_invoice_number' => 'សូមបញ្ចូលលេខវិក្កយបត្រ',
+ 'please_enter_a_quote_number' => 'សូមបញ្ចូលលេខសម្រង់',
+ 'clients_invoices' => 'វិក្កយបត្ររបស់ :client',
+ 'viewed' => 'បានមើល',
+ 'approved' => 'បានអនុម័ត',
+ 'invoice_status_1' => 'សេចក្តីព្រាង',
+ 'invoice_status_2' => 'បានផ្ញើ',
+ 'invoice_status_3' => 'បានមើល',
+ 'invoice_status_4' => 'បានអនុម័ត',
+ 'invoice_status_5' => 'ផ្នែក',
+ 'invoice_status_6' => 'បង់',
+ 'marked_invoice_as_sent' => 'បានសម្គាល់វិក្កយបត្រដោយជោគជ័យថាបានផ្ញើ',
+ 'please_enter_a_client_or_contact_name' => 'សូមបញ្ចូលអតិថិជន ឬឈ្មោះទំនាក់ទំនង',
+ 'restart_app_to_apply_change' => 'ចាប់ផ្តើមកម្មវិធីឡើងវិញ ដើម្បីអនុវត្តការផ្លាស់ប្តូរ',
+ 'refresh_data' => 'ផ្ទុកទិន្នន័យឡើងវិញ',
+ 'blank_contact' => 'ទំនាក់ទំនងទទេ',
+ 'no_records_found' => 'រកមិនឃើញកំណត់ត្រាទេ។',
+ 'industry' => 'ឧស្សាហកម្ម',
+ 'size' => 'ទំហំ',
+ 'net' => 'សុទ្ធ',
+ 'show_tasks' => 'បង្ហាញកិច្ចការ',
+ 'email_reminders' => 'អ៊ីមែលរំលឹក',
+ 'reminder1' => 'ការរំលឹកដំបូង',
+ 'reminder2' => 'ការរំលឹកលើកទីពីរ',
+ 'reminder3' => 'ការរំលឹកទីបី',
+ 'send' => 'ផ្ញើ',
+ 'auto_billing' => 'ការចេញវិក្កយបត្រដោយស្វ័យប្រវត្តិ',
+ 'button' => 'ប៊ូតុង',
+ 'more' => 'ច្រើនទៀត',
+ 'edit_recurring_invoice' => 'កែសម្រួលវិក្កយបត្រដែលកើតឡើងដដែលៗ',
+ 'edit_recurring_quote' => 'កែសម្រួលសម្រង់ពាក្យដដែលៗ',
+ 'quote_status' => 'ស្ថានភាពសម្រង់',
+ 'please_select_an_invoice' => 'សូមជ្រើសរើសវិក្កយបត្រ',
+ 'filtered_by' => 'ត្រងដោយ',
+ 'payment_status' => 'ស្ថានភាពការទូទាត់',
+ 'payment_status_1' => 'កំពុងរង់ចាំ',
+ 'payment_status_2' => 'ចាត់ទុកជាមោឃៈ',
+ 'payment_status_3' => 'បរាជ័យ',
+ 'payment_status_4' => 'បានបញ្ចប់',
+ 'payment_status_5' => 'បានសងប្រាក់វិញមួយផ្នែក',
+ 'payment_status_6' => 'សងប្រាក់វិញ។',
+ 'send_receipt_to_client' => 'ផ្ញើវិក័យប័ត្រទៅអតិថិជន',
+ 'refunded' => 'សងប្រាក់វិញ។',
+ 'marked_quote_as_sent' => 'បានសម្គាល់សម្រង់ដោយជោគជ័យថាបានផ្ញើ',
+ 'custom_module_settings' => 'ការកំណត់ម៉ូឌុលផ្ទាល់ខ្លួន',
+ 'ticket' => 'សំបុត្រ',
+ 'tickets' => 'សំបុត្រ',
+ 'ticket_number' => 'សំបុត្រ #',
+ 'new_ticket' => 'សំបុត្រថ្មី។',
+ 'edit_ticket' => 'កែសម្រួលសំបុត្រ',
+ 'view_ticket' => 'មើលសំបុត្រ',
+ 'archive_ticket' => 'បណ្ណសារសំបុត្រ',
+ 'restore_ticket' => 'ទិញសំបុត្រឡើងវិញ',
+ 'delete_ticket' => 'លុបសំបុត្រ',
+ 'archived_ticket' => 'បានរក្សាទុកសំបុត្រដោយជោគជ័យ',
+ 'archived_tickets' => 'បានរក្សាទុកសំបុត្រដោយជោគជ័យ',
+ 'restored_ticket' => 'បានស្ដារសំបុត្រឡើងវិញដោយជោគជ័យ',
+ 'deleted_ticket' => 'បានលុបសំបុត្រដោយជោគជ័យ',
+ 'open' => 'បើក',
+ 'new' => 'ថ្មី។',
+ 'closed' => 'បិទ',
+ 'reopened' => 'បានបើកឡើងវិញ',
+ 'priority' => 'អាទិភាព',
+ 'last_updated' => 'ធ្វើឱ្យទាន់សម័យចុងក្រោយ',
+ 'comment' => 'មតិយោបល់',
+ 'tags' => 'ស្លាក',
+ 'linked_objects' => 'វត្ថុភ្ជាប់',
+ 'low' => 'ទាប',
+ 'medium' => 'មធ្យម',
+ 'high' => 'ខ្ពស់',
+ 'no_due_date' => 'មិនមានកាលបរិច្ឆេទកំណត់ទេ។',
+ '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_unavailable' => 'ឈ្មោះបានយក',
+ 'local_part_available' => 'ឈ្មោះដែលអាចប្រើបាន',
+ 'local_part_invalid' => 'ឈ្មោះមិនត្រឹមត្រូវ (ជាលេខអាល់ហ្វាប៉ុណ្ណោះ គ្មានចន្លោះ',
+ 'local_part_help' => 'ប្ដូរតាមបំណងផ្នែកមូលដ្ឋាននៃអ៊ីមែលជំនួយចូលរបស់អ្នក ពោលគឺ។ YOUR_NAME@support.invoiceninja.com',
+ 'from_name_help' => 'ពីឈ្មោះគឺជាអ្នកផ្ញើដែលអាចស្គាល់បាន ដែលត្រូវបានបង្ហាញជំនួសឱ្យអាសយដ្ឋានអ៊ីមែល ពោលគឺមជ្ឈមណ្ឌលជំនួយ',
+ 'local_part_placeholder' => 'ឈ្មោះរបស់អ្នក',
+ 'from_name_placeholder' => 'មជ្ឈមណ្ឌលគាំទ្រ',
+ 'attachments' => 'ឯកសារភ្ជាប់',
+ 'client_upload' => 'ការបង្ហោះរបស់អតិថិជន',
+ 'enable_client_upload_help' => 'អនុញ្ញាតឱ្យអតិថិជនបង្ហោះឯកសារ/ឯកសារភ្ជាប់',
+ 'max_file_size_help' => 'ទំហំឯកសារអតិបរមា (KB) ត្រូវបានកំណត់ដោយអថេរ post_max_size និង upload_max_filesize ដូចដែលបានកំណត់ក្នុង PHP.INI របស់អ្នក។',
+ 'max_file_size' => 'ទំហំឯកសារអតិបរមា',
+ 'mime_types' => 'ប្រភេទ Mime',
+ 'mime_types_placeholder' => '.pdf , .docx , .jpg',
+ 'mime_types_help' => 'បញ្ជីដោយបំបែកដោយសញ្ញាក្បៀសនៃប្រភេទ mime ដែលបានអនុញ្ញាត ទុកទទេសម្រាប់ទាំងអស់គ្នា',
+ 'ticket_number_start_help' => 'លេខសំបុត្រត្រូវតែធំជាងលេខសំបុត្របច្ចុប្បន្ន',
+ 'new_ticket_template_id' => 'សំបុត្រថ្មី។',
+ 'new_ticket_autoresponder_help' => 'ការជ្រើសរើសគំរូនឹងផ្ញើការឆ្លើយតបដោយស្វ័យប្រវត្តិទៅអតិថិជន/ទំនាក់ទំនង នៅពេលសំបុត្រថ្មីត្រូវបានបង្កើត',
+ 'update_ticket_template_id' => 'សំបុត្រដែលបានធ្វើបច្ចុប្បន្នភាព',
+ 'update_ticket_autoresponder_help' => 'ការជ្រើសរើសគំរូនឹងផ្ញើការឆ្លើយតបដោយស្វ័យប្រវត្តិទៅអតិថិជន/ទំនាក់ទំនង នៅពេលសំបុត្រត្រូវបានធ្វើបច្ចុប្បន្នភាព',
+ 'close_ticket_template_id' => 'សំបុត្របិទ',
+ 'close_ticket_autoresponder_help' => 'ការជ្រើសរើសគំរូនឹងផ្ញើការឆ្លើយតបដោយស្វ័យប្រវត្តិទៅអតិថិជន/ទំនាក់ទំនង នៅពេលសំបុត្រត្រូវបានបិទ',
+ 'default_priority' => 'អាទិភាពលំនាំដើម',
+ 'alert_new_comment_id' => 'មតិថ្មី។',
+ 'alert_comment_ticket_help' => 'ការជ្រើសរើសគំរូនឹងផ្ញើការជូនដំណឹង (ទៅភ្នាក់ងារ) នៅពេលមានមតិយោបល់។',
+ 'alert_comment_ticket_email_help' => 'សញ្ញាក្បៀសបានបំបែកអ៊ីមែលទៅ bcc នៅលើមតិយោបល់ថ្មី។',
+ 'new_ticket_notification_list' => 'ការជូនដំណឹងអំពីសំបុត្រថ្មីបន្ថែម',
+ 'update_ticket_notification_list' => 'ការជូនដំណឹងអំពីមតិយោបល់ថ្មីបន្ថែម',
+ 'comma_separated_values' => 'admin@example.com, supervisor@example.com',
+ 'alert_ticket_assign_agent_id' => 'ការកំណត់សំបុត្រ',
+ 'alert_ticket_assign_agent_id_hel' => 'ការជ្រើសរើសគំរូនឹងផ្ញើការជូនដំណឹង (ទៅភ្នាក់ងារ) នៅពេលដែលសំបុត្រត្រូវបានចាត់តាំង។',
+ 'alert_ticket_assign_agent_id_notifications' => 'ការជូនដំណឹងបន្ថែមដែលបានកំណត់សំបុត្រ',
+ 'alert_ticket_assign_agent_id_help' => 'សញ្ញាក្បៀសបានបំបែកអ៊ីមែលទៅ bcc នៅលើការចាត់តាំងសំបុត្រ។',
+ 'alert_ticket_transfer_email_help' => 'សញ្ញាក្បៀសបំបែកអ៊ីមែលទៅ bcc នៅលើការផ្ទេរសំបុត្រ។',
+ 'alert_ticket_overdue_agent_id' => 'សំបុត្រហួសកាលកំណត់',
+ 'alert_ticket_overdue_email' => 'ការជូនដំណឹងអំពីសំបុត្រហួសកាលកំណត់បន្ថែម',
+ 'alert_ticket_overdue_email_help' => 'សញ្ញាក្បៀសបានបំបែកអ៊ីមែលទៅជា bcc នៅលើសំបុត្រហួសកំណត់។',
+ 'alert_ticket_overdue_agent_id_help' => 'ការជ្រើសរើសគំរូនឹងផ្ញើការជូនដំណឹង (ទៅភ្នាក់ងារ) នៅពេលដែលសំបុត្រផុតកំណត់។',
+ 'ticket_master' => 'ម្ចាស់សំបុត្រ',
+ 'ticket_master_help' => 'មានសមត្ថភាពក្នុងការចាត់តាំង និងផ្ទេរសំបុត្រ។ ត្រូវបានចាត់តាំងជាភ្នាក់ងារលំនាំដើមសម្រាប់សំបុត្រទាំងអស់។',
+ 'default_agent' => 'ភ្នាក់ងារលំនាំដើម',
+ 'default_agent_help' => 'ប្រសិនបើបានជ្រើសនឹងត្រូវបានកំណត់ដោយស្វ័យប្រវត្តិចំពោះសំបុត្រចូលទាំងអស់',
+ 'show_agent_details' => 'បង្ហាញព័ត៌មានលម្អិតភ្នាក់ងារលើការឆ្លើយតប',
+ 'avatar' => 'Avatar',
+ 'remove_avatar' => 'លុបរូបតំណាង',
+ 'ticket_not_found' => 'រកមិនឃើញសំបុត្រទេ។',
+ 'add_template' => 'បន្ថែមគំរូ',
+ 'ticket_template' => 'គំរូសំបុត្រ',
+ 'ticket_templates' => 'គំរូសំបុត្រ',
+ 'updated_ticket_template' => 'គំរូសំបុត្រដែលបានធ្វើបច្ចុប្បន្នភាព',
+ 'created_ticket_template' => 'បានបង្កើតគំរូសំបុត្រ',
+ 'archive_ticket_template' => 'បណ្ណសារគំរូ',
+ 'restore_ticket_template' => 'ស្តារគំរូ',
+ 'archived_ticket_template' => 'ពុម្ពដែលបានទុកក្នុងប័ណ្ណសារដោយជោគជ័យ',
+ 'restored_ticket_template' => 'បានស្ដារគំរូដោយជោគជ័យ',
+ 'close_reason' => 'ប្រាប់យើងពីមូលហេតុដែលអ្នកបិទសំបុត្រនេះ។',
+ 'reopen_reason' => 'អនុញ្ញាតឱ្យពួកយើងដឹងពីមូលហេតុដែលអ្នកកំពុងបើកសំបុត្រនេះឡើងវិញ',
+ 'enter_ticket_message' => 'សូមបញ្ចូលសារដើម្បីធ្វើបច្ចុប្បន្នភាពសំបុត្រ',
+ 'show_hide_all' => 'បង្ហាញ / លាក់ទាំងអស់។',
+ 'subject_required' => 'ប្រធានបទដែលត្រូវការ',
+ 'mobile_refresh_warning' => 'ប្រសិនបើអ្នកកំពុងប្រើកម្មវិធីទូរស័ព្ទ អ្នកប្រហែលជាត្រូវធ្វើការអាប់ដេតពេញលេញ។',
+ 'enable_proposals_for_background' => 'ដើម្បីបង្ហោះរូបភាពផ្ទៃខាងក្រោយ :link ដើម្បីបើកម៉ូឌុលសំណើ។',
+ 'ticket_assignment' => 'សំបុត្រ :ticket_number ត្រូវបានចាត់ឱ្យទៅ :agent',
+ 'ticket_contact_reply' => 'សំបុត្រ :ticket_number ត្រូវបានធ្វើបច្ចុប្បន្នភាពដោយអតិថិជន :contact',
+ 'ticket_new_template_subject' => 'សំបុត្រ :ticket_number ត្រូវបានបង្កើត។',
+ 'ticket_updated_template_subject' => 'សំបុត្រ :ticket_number ត្រូវបានធ្វើបច្ចុប្បន្នភាព។',
+ 'ticket_closed_template_subject' => 'សំបុត្រ :ticket_number ត្រូវបានបិទ។',
+ 'ticket_overdue_template_subject' => 'សំបុត្រ :ticket_number ឥឡូវនេះផុតកំណត់ហើយ។',
+ 'merge' => 'បញ្ចូលគ្នា',
+ 'merged' => 'បញ្ចូលគ្នា',
+ 'agent' => 'ភ្នាក់ងារ',
+ 'parent_ticket' => 'សំបុត្រឪពុកម្តាយ',
+ 'linked_tickets' => 'សំបុត្រភ្ជាប់',
+ 'merge_prompt' => 'បញ្ចូលលេខសំបុត្រដើម្បីបញ្ចូលចូលគ្នា។',
+ 'merge_from_to' => 'សំបុត្រ #:old_ticket បានបញ្ចូលទៅក្នុង Ticket #:new_ticket',
+ 'merge_closed_ticket_text' => 'សំបុត្រ #:old_ticket ត្រូវបានបិទ ហើយបញ្ចូលទៅក្នុង Ticket#:new_ticket - :subject',
+ 'merge_updated_ticket_text' => 'សំបុត្រ #:old_ticket ត្រូវបានបិទ ហើយបញ្ចូលទៅក្នុងសំបុត្រនេះ។',
+ 'merge_placeholder' => 'បញ្ចូលសំបុត្រ #: សំបុត្រចូលទៅក្នុងសំបុត្រខាងក្រោម',
+ 'select_ticket' => 'ជ្រើសរើសសំបុត្រ',
+ 'new_internal_ticket' => 'សំបុត្រខាងក្នុងថ្មី។',
+ 'internal_ticket' => 'សំបុត្រខាងក្នុង',
+ 'create_ticket' => 'បង្កើតសំបុត្រ',
+ 'allow_inbound_email_tickets_external' => 'សំបុត្រថ្មីតាមអ៊ីមែល (អតិថិជន)',
+ 'allow_inbound_email_tickets_external_help' => 'អនុញ្ញាតឱ្យអតិថិជនបង្កើតសំបុត្រថ្មីតាមអ៊ីមែល',
+ 'include_in_filter' => 'រួមបញ្ចូលនៅក្នុងតម្រង',
+ 'custom_client1' => '៖ VALUE',
+ 'custom_client2' => '៖ VALUE',
+ 'compare' => 'ប្រៀបធៀប',
+ 'hosted_login' => 'បង្ហោះចូល',
+ 'selfhost_login' => 'ការចូលម៉ាស៊ីនខ្លួនឯង',
+ 'google_login' => 'ចូល Google',
+ 'thanks_for_patience' => 'សូមអរគុណចំពោះការអត់ធ្មត់របស់អ្នក ខណៈពេលដែលយើងធ្វើការដើម្បីអនុវត្តមុខងារទាំងនេះ។\n\nយើងសង្ឃឹមថានឹងបញ្ចប់ពួកវាក្នុងរយៈពេលពីរបីខែខាងមុខ។\n\nរហូតដល់ពេលនោះ យើងនឹងបន្តគាំទ្រ',
+ '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' => 'កែសម្រួលភាគរយទៅក្នុងគណនីសម្រាប់ថ្លៃសេវា',
+ 'show_product_notes' => 'បង្ហាញព័ត៌មានលម្អិតអំពីផលិតផល',
+ 'show_product_notes_help' => 'រួមបញ្ចូល ការពិពណ៌នា និងតម្លៃ នៅក្នុងបញ្ជីទម្លាក់ចុះផលិតផល',
+ 'important' => 'សំខាន់',
+ 'thank_you_for_using_our_app' => 'សូមអរគុណចំពោះការប្រើប្រាស់កម្មវិធីរបស់យើង!',
+ 'if_you_like_it' => 'ប្រសិនបើអ្នកចូលចិត្តវាសូម',
+ 'to_rate_it' => 'ដើម្បីវាយតម្លៃវា។',
+ 'average' => 'មធ្យម',
+ 'unapproved' => 'មិនបានអនុម័ត',
+ 'authenticate_to_change_setting' => 'សូមផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ ដើម្បីផ្លាស់ប្តូរការកំណត់នេះ។',
+ 'locked' => 'ចាក់សោ',
+ 'authenticate' => 'ផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ',
+ 'please_authenticate' => 'សូមបញ្ជាក់',
+ 'biometric_authentication' => 'ការផ្ទៀងផ្ទាត់ជីវមាត្រ',
+ 'auto_start_tasks' => 'កិច្ចការចាប់ផ្តើមដោយស្វ័យប្រវត្តិ',
+ 'budgeted' => 'ថវិកា',
+ 'please_enter_a_name' => 'សូមបញ្ចូលឈ្មោះ',
+ 'click_plus_to_add_time' => 'ចុច + ដើម្បីបន្ថែមម៉ោង',
+ 'design' => 'រចនា',
+ 'password_is_too_short' => 'ពាក្យសម្ងាត់ខ្លីពេក',
+ 'failed_to_find_record' => 'បរាជ័យក្នុងការស្វែងរកកំណត់ត្រា',
+ 'valid_until_days' => 'មានសុពលភាពដល់',
+ 'valid_until_days_help' => 'កំណត់ដោយស្វ័យប្រវត្តិ សុពលភាពរហូតដល់ តម្លៃនៅលើសម្រង់ទៅថ្ងៃជាច្រើននេះនាពេលអនាគត។ ទុកទទេដើម្បីបិទ។',
+ 'usually_pays_in_days' => 'ថ្ងៃ',
+ 'requires_an_enterprise_plan' => 'ទាមទារផែនការសហគ្រាស',
+ 'take_picture' => 'ថតរូប',
+ 'upload_file' => 'ផ្ទុកឯកសារឡើង',
+ 'new_document' => 'ឯកសារថ្មី។',
+ 'edit_document' => 'កែសម្រួលឯកសារ',
+ 'uploaded_document' => 'បានបង្ហោះឯកសារដោយជោគជ័យ',
+ 'updated_document' => 'បានធ្វើបច្ចុប្បន្នភាពឯកសារដោយជោគជ័យ',
+ 'archived_document' => 'ឯកសារដែលបានរក្សាទុកដោយជោគជ័យ',
+ 'deleted_document' => 'បានលុបឯកសារដោយជោគជ័យ',
+ 'restored_document' => 'បានស្ដារឯកសារឡើងវិញដោយជោគជ័យ',
+ 'no_history' => 'គ្មានប្រវត្តិ',
+ 'expense_status_1' => 'ចូល',
+ 'expense_status_2' => 'កំពុងរង់ចាំ',
+ 'expense_status_3' => 'វិក័យប័ត្រ',
+ 'no_record_selected' => 'មិនបានជ្រើសរើសកំណត់ត្រាទេ។',
+ 'error_unsaved_changes' => 'សូមរក្សាទុក ឬបោះបង់ការផ្លាស់ប្ដូររបស់អ្នក។',
+ 'thank_you_for_your_purchase' => 'សូមអរគុណសម្រាប់ការទិញរបស់អ្នក!',
+ 'redeem' => 'ប្រោសលោះ',
+ 'back' => 'ត្រឡប់មកវិញ',
+ 'past_purchases' => 'ការទិញកន្លងមក',
+ 'annual_subscription' => 'ការជាវប្រចាំឆ្នាំ',
+ 'pro_plan' => 'ផែនការគាំទ្រ',
+ 'enterprise_plan' => 'ផែនការសហគ្រាស',
+ 'count_users' => ':count អ្នកប្រើប្រាស់',
+ 'upgrade' => 'ធ្វើឱ្យប្រសើរឡើង',
+ 'please_enter_a_first_name' => 'សូមបញ្ចូលឈ្មោះដំបូង',
+ 'please_enter_a_last_name' => 'សូមបញ្ចូលនាមត្រកូល',
+ 'please_agree_to_terms_and_privacy' => 'សូមយល់ព្រមជាមួយលក្ខខណ្ឌនៃសេវាកម្ម និងគោលការណ៍ឯកជនភាពដើម្បីបង្កើតគណនីមួយ។',
+ 'i_agree_to_the' => 'ខ្ញុំយល់ព្រមនឹង',
+ 'terms_of_service_link' => 'លក្ខខណ្ឌនៃសេវាកម្ម',
+ 'privacy_policy_link' => 'គោលការណ៍ភាពឯកជន',
+ 'view_website' => 'មើលគេហទំព័រ',
+ 'create_account' => 'បង្កើតគណនី',
+ 'email_login' => 'ចូលអ៊ីមែល',
+ 'late_fees' => 'ថ្លៃសេវាយឺត',
+ 'payment_number' => 'លេខបង់ប្រាក់',
+ 'before_due_date' => 'នៅមុនថ្ងៃកំណត់',
+ 'after_due_date' => 'បន្ទាប់ពីកាលបរិច្ឆេទកំណត់',
+ 'after_invoice_date' => 'បន្ទាប់ពីកាលបរិច្ឆេទវិក័យប័ត្រ',
+ 'filtered_by_user' => 'ត្រងដោយអ្នកប្រើប្រាស់',
+ 'created_user' => 'អ្នកប្រើប្រាស់បានបង្កើតដោយជោគជ័យ',
+ 'primary_font' => 'ពុម្ពអក្សរបឋម',
+ 'secondary_font' => 'ពុម្ពអក្សរបន្ទាប់បន្សំ',
+ 'number_padding' => 'បន្ទះលេខ',
+ 'general' => 'ទូទៅ',
+ 'surcharge_field' => 'វាលបន្ថែម',
+ 'company_value' => 'តម្លៃក្រុមហ៊ុន',
+ 'credit_field' => 'វាលឥណទាន',
+ 'payment_field' => 'វាលការទូទាត់',
+ 'group_field' => 'វាលក្រុម',
+ 'number_counter' => 'លេខរាប់',
+ 'number_pattern' => 'លំនាំលេខ',
+ 'custom_javascript' => 'JavaScript ផ្ទាល់ខ្លួន',
+ 'portal_mode' => 'របៀបវិបផតថល។',
+ 'attach_pdf' => 'ភ្ជាប់ PDF',
+ 'attach_documents' => 'ភ្ជាប់ឯកសារ',
+ 'attach_ubl' => 'ភ្ជាប់ UBL',
+ 'email_style' => 'រចនាប័ទ្មអ៊ីមែល',
+ 'processed' => 'ដំណើរការ',
+ 'fee_amount' => 'ចំនួនទឹកប្រាក់ថ្លៃសេវា',
+ 'fee_percent' => 'ភាគរយនៃថ្លៃសេវា',
+ 'fee_cap' => 'កម្រៃជើងសារ',
+ 'limits_and_fees' => 'Limits/Fees',
+ 'credentials' => 'Credentials',
+ 'require_billing_address_help' => 'Require client to provide their billing address',
+ 'require_shipping_address_help' => 'Require client to provide their shipping address',
+ 'deleted_tax_rate' => 'Successfully deleted tax rate',
+ 'restored_tax_rate' => 'Successfully restored tax rate',
+ 'provider' => 'Provider',
+ 'company_gateway' => 'Payment Gateway',
+ 'company_gateways' => 'Payment Gateways',
+ 'new_company_gateway' => 'New Gateway',
+ 'edit_company_gateway' => 'Edit Gateway',
+ 'created_company_gateway' => 'Successfully created gateway',
+ 'updated_company_gateway' => 'Successfully updated gateway',
+ 'archived_company_gateway' => 'Successfully archived gateway',
+ 'deleted_company_gateway' => 'Successfully deleted gateway',
+ 'restored_company_gateway' => 'Successfully restored gateway',
+ 'continue_editing' => 'Continue Editing',
+ 'default_value' => 'Default value',
+ 'currency_format' => 'Currency Format',
+ 'first_day_of_the_week' => 'First Day of the Week',
+ 'first_month_of_the_year' => 'First Month of the Year',
+ 'symbol' => 'Symbol',
+ 'ocde' => 'Code',
+ 'date_format' => 'Date Format',
+ 'datetime_format' => 'Datetime Format',
+ 'send_reminders' => 'Send Reminders',
+ 'timezone' => 'Timezone',
+ 'filtered_by_group' => 'Filtered by Group',
+ 'filtered_by_invoice' => 'Filtered by Invoice',
+ 'filtered_by_client' => 'Filtered by Client',
+ 'filtered_by_vendor' => 'Filtered by Vendor',
+ 'group_settings' => 'Group Settings',
+ 'groups' => 'Groups',
+ 'new_group' => 'New Group',
+ 'edit_group' => 'Edit Group',
+ 'created_group' => 'Successfully created group',
+ 'updated_group' => 'Successfully updated group',
+ 'archived_group' => 'Successfully archived group',
+ 'deleted_group' => 'Successfully deleted group',
+ 'restored_group' => 'Successfully restored group',
+ 'upload_logo' => 'Upload Logo',
+ 'uploaded_logo' => 'Successfully uploaded logo',
+ 'saved_settings' => 'Successfully saved settings',
+ 'device_settings' => 'Device Settings',
+ 'credit_cards_and_banks' => 'Credit Cards & Banks',
+ 'price' => 'Price',
+ 'email_sign_up' => 'Email Sign Up',
+ 'google_sign_up' => 'Google Sign Up',
+ 'sign_up_with_google' => 'Sign Up With Google',
+ 'long_press_multiselect' => 'Long-press Multiselect',
+ 'migrate_to_next_version' => 'Migrate to the next version of Invoice Ninja',
+ 'migrate_intro_text' => 'We\'ve been working on next version of Invoice Ninja. Click the button bellow to start the migration.',
+ 'start_the_migration' => 'Start the migration',
+ 'migration' => 'Migration',
+ 'welcome_to_the_new_version' => 'Welcome to the new version of Invoice Ninja',
+ 'next_step_data_download' => 'At the next step, we\'ll let you download your data for the migration.',
+ 'download_data' => 'Press button below to download the data.',
+ 'migration_import' => 'Awesome! Now you are ready to import your migration. Go to your new installation to import your data',
+ 'continue' => 'Continue',
+ 'company1' => 'Custom Company 1',
+ 'company2' => 'Custom Company 2',
+ 'company3' => 'Custom Company 3',
+ 'company4' => 'Custom Company 4',
+ 'product1' => 'Custom Product 1',
+ 'product2' => 'Custom Product 2',
+ 'product3' => 'Custom Product 3',
+ 'product4' => 'Custom Product 4',
+ 'client1' => 'Custom Client 1',
+ 'client2' => 'Custom Client 2',
+ 'client3' => 'Custom Client 3',
+ 'client4' => 'Custom Client 4',
+ 'contact1' => 'Custom Contact 1',
+ 'contact2' => 'Custom Contact 2',
+ 'contact3' => 'Custom Contact 3',
+ 'contact4' => 'Custom Contact 4',
+ 'task1' => 'Custom Task 1',
+ 'task2' => 'Custom Task 2',
+ 'task3' => 'Custom Task 3',
+ 'task4' => 'Custom Task 4',
+ 'project1' => 'Custom Project 1',
+ 'project2' => 'Custom Project 2',
+ 'project3' => 'Custom Project 3',
+ 'project4' => 'Custom Project 4',
+ 'expense1' => 'Custom Expense 1',
+ 'expense2' => 'Custom Expense 2',
+ 'expense3' => 'Custom Expense 3',
+ 'expense4' => 'Custom Expense 4',
+ 'vendor1' => 'Custom Vendor 1',
+ 'vendor2' => 'Custom Vendor 2',
+ 'vendor3' => 'Custom Vendor 3',
+ 'vendor4' => 'Custom Vendor 4',
+ 'invoice1' => 'Custom Invoice 1',
+ 'invoice2' => 'Custom Invoice 2',
+ 'invoice3' => 'Custom Invoice 3',
+ 'invoice4' => 'Custom Invoice 4',
+ 'payment1' => 'Custom Payment 1',
+ 'payment2' => 'Custom Payment 2',
+ 'payment3' => 'Custom Payment 3',
+ 'payment4' => 'Custom Payment 4',
+ 'surcharge1' => 'Custom Surcharge 1',
+ 'surcharge2' => 'Custom Surcharge 2',
+ 'surcharge3' => 'Custom Surcharge 3',
+ 'surcharge4' => 'Custom Surcharge 4',
+ 'group1' => 'Custom Group 1',
+ 'group2' => 'Custom Group 2',
+ 'group3' => 'Custom Group 3',
+ 'group4' => 'Custom Group 4',
+ 'number' => 'Number',
+ 'count' => 'Count',
+ 'is_active' => 'Is Active',
+ 'contact_last_login' => 'Contact Last Login',
+ 'contact_full_name' => 'Contact Full Name',
+ 'contact_custom_value1' => 'Contact Custom Value 1',
+ 'contact_custom_value2' => 'Contact Custom Value 2',
+ 'contact_custom_value3' => 'Contact Custom Value 3',
+ 'contact_custom_value4' => 'Contact Custom Value 4',
+ 'assigned_to_id' => 'Assigned To Id',
+ 'created_by_id' => 'Created By Id',
+ 'add_column' => 'Add Column',
+ 'edit_columns' => 'Edit Columns',
+ 'to_learn_about_gogle_fonts' => 'to learn about Google Fonts',
+ 'refund_date' => 'Refund Date',
+ 'multiselect' => 'Multiselect',
+ 'verify_password' => 'Verify Password',
+ 'applied' => 'Applied',
+ 'include_recent_errors' => 'Include recent errors from the logs',
+ 'your_message_has_been_received' => 'We have received your message and will try to respond promptly.',
+ 'show_product_details' => 'Show Product Details',
+ 'show_product_details_help' => 'Include the description and cost in the product dropdown',
+ 'pdf_min_requirements' => 'The PDF renderer requires :version',
+ 'adjust_fee_percent' => 'Adjust Fee Percent',
+ 'configure_settings' => 'Configure Settings',
+ 'about' => 'About',
+ 'credit_email' => 'Credit Email',
+ 'domain_url' => 'Domain URL',
+ 'password_is_too_easy' => 'Password must contain an upper case character and a number',
+ 'client_portal_tasks' => 'Client Portal Tasks',
+ 'client_portal_dashboard' => 'Client Portal Dashboard',
+ 'please_enter_a_value' => 'Please enter a value',
+ 'deleted_logo' => 'Successfully deleted logo',
+ 'generate_number' => 'Generate Number',
+ 'when_saved' => 'When Saved',
+ 'when_sent' => 'When Sent',
+ 'select_company' => 'Select Company',
+ 'float' => 'Float',
+ 'collapse' => 'Collapse',
+ 'show_or_hide' => 'Show/hide',
+ 'menu_sidebar' => 'Menu Sidebar',
+ 'history_sidebar' => 'History Sidebar',
+ 'tablet' => 'Tablet',
+ 'layout' => 'Layout',
+ 'module' => 'Module',
+ 'first_custom' => 'First Custom',
+ 'second_custom' => 'Second Custom',
+ 'third_custom' => 'Third Custom',
+ 'show_cost' => 'Show Cost',
+ 'show_cost_help' => 'Display a product cost field to track the markup/profit',
+ 'show_product_quantity' => 'Show Product Quantity',
+ 'show_product_quantity_help' => 'Display a product quantity field, otherwise default to one',
+ 'show_invoice_quantity' => 'Show Invoice Quantity',
+ 'show_invoice_quantity_help' => 'Display a line item quantity field, otherwise default to one',
+ 'default_quantity' => 'Default Quantity',
+ 'default_quantity_help' => 'Automatically set the line item quantity to one',
+ 'one_tax_rate' => 'One Tax Rate',
+ 'two_tax_rates' => 'Two Tax Rates',
+ 'three_tax_rates' => 'Three Tax Rates',
+ 'default_tax_rate' => 'Default Tax Rate',
+ 'invoice_tax' => 'Invoice Tax',
+ 'line_item_tax' => 'Line Item Tax',
+ 'inclusive_taxes' => 'Inclusive Taxes',
+ 'invoice_tax_rates' => 'Invoice Tax Rates',
+ 'item_tax_rates' => 'Item Tax Rates',
+ 'configure_rates' => 'Configure rates',
+ 'tax_settings_rates' => 'Tax Rates',
+ 'accent_color' => 'Accent Color',
+ 'comma_sparated_list' => 'Comma separated list',
+ 'single_line_text' => 'Single-line text',
+ 'multi_line_text' => 'Multi-line text',
+ 'dropdown' => 'Dropdown',
+ 'field_type' => 'Field Type',
+ 'recover_password_email_sent' => 'A password recovery email has been sent',
+ 'removed_user' => 'Successfully removed user',
+ 'freq_three_years' => 'Three Years',
+ 'military_time_help' => '24 Hour Display',
+ 'click_here_capital' => 'Click here',
+ 'marked_invoice_as_paid' => 'Successfully marked invoice as sent',
+ 'marked_invoices_as_sent' => 'Successfully marked invoices as sent',
+ 'marked_invoices_as_paid' => 'Successfully marked invoices as sent',
+ 'activity_57' => 'System failed to email invoice :invoice',
+ 'custom_value3' => 'Custom Value 3',
+ 'custom_value4' => 'Custom Value 4',
+ 'email_style_custom' => 'Custom Email Style',
+ 'custom_message_dashboard' => 'Custom Dashboard Message',
+ 'custom_message_unpaid_invoice' => 'Custom Unpaid Invoice Message',
+ 'custom_message_paid_invoice' => 'Custom Paid Invoice Message',
+ 'custom_message_unapproved_quote' => 'Custom Unapproved Quote Message',
+ 'lock_sent_invoices' => 'Lock Sent Invoices',
+ 'translations' => 'Translations',
+ 'task_number_pattern' => 'Task Number Pattern',
+ 'task_number_counter' => 'Task Number Counter',
+ 'expense_number_pattern' => 'Expense Number Pattern',
+ 'expense_number_counter' => 'Expense Number Counter',
+ 'vendor_number_pattern' => 'Vendor Number Pattern',
+ 'vendor_number_counter' => 'Vendor Number Counter',
+ 'ticket_number_pattern' => 'Ticket Number Pattern',
+ 'ticket_number_counter' => 'Ticket Number Counter',
+ 'payment_number_pattern' => 'Payment Number Pattern',
+ 'payment_number_counter' => 'Payment Number Counter',
+ 'invoice_number_pattern' => 'Invoice Number Pattern',
+ 'quote_number_pattern' => 'Quote Number Pattern',
+ 'client_number_pattern' => 'Credit Number Pattern',
+ 'client_number_counter' => 'Credit Number Counter',
+ 'credit_number_pattern' => 'Credit Number Pattern',
+ 'credit_number_counter' => 'Credit Number Counter',
+ 'reset_counter_date' => 'Reset Counter Date',
+ 'counter_padding' => 'Counter Padding',
+ 'shared_invoice_quote_counter' => 'Share Invoice Quote Counter',
+ 'default_tax_name_1' => 'Default Tax Name 1',
+ 'default_tax_rate_1' => 'Default Tax Rate 1',
+ 'default_tax_name_2' => 'Default Tax Name 2',
+ 'default_tax_rate_2' => 'Default Tax Rate 2',
+ 'default_tax_name_3' => 'Default Tax Name 3',
+ 'default_tax_rate_3' => 'Default Tax Rate 3',
+ 'email_subject_invoice' => 'Email Invoice Subject',
+ 'email_subject_quote' => 'Email Quote Subject',
+ 'email_subject_payment' => 'Email Payment Subject',
+ 'switch_list_table' => 'Switch List Table',
+ 'client_city' => 'Client City',
+ 'client_state' => 'Client State',
+ 'client_country' => 'Client Country',
+ 'client_is_active' => 'Client is Active',
+ 'client_balance' => 'Client Balance',
+ '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',
+ 'archived_at' => 'Archived At',
+ 'has_expenses' => 'Has Expenses',
+ 'custom_taxes1' => 'Custom Taxes 1',
+ 'custom_taxes2' => 'Custom Taxes 2',
+ 'custom_taxes3' => 'Custom Taxes 3',
+ 'custom_taxes4' => 'Custom Taxes 4',
+ 'custom_surcharge1' => 'Custom Surcharge 1',
+ 'custom_surcharge2' => 'Custom Surcharge 2',
+ 'custom_surcharge3' => 'Custom Surcharge 3',
+ 'custom_surcharge4' => 'Custom Surcharge 4',
+ 'is_deleted' => 'Is Deleted',
+ 'vendor_city' => 'Vendor City',
+ 'vendor_state' => 'Vendor State',
+ 'vendor_country' => 'Vendor Country',
+ 'credit_footer' => 'Credit Footer',
+ 'credit_terms' => 'Credit Terms',
+ 'untitled_company' => 'Untitled Company',
+ 'added_company' => 'Successfully added company',
+ 'supported_events' => 'Supported Events',
+ 'custom3' => 'Third Custom',
+ 'custom4' => 'Fourth Custom',
+ 'optional' => 'Optional',
+ 'license' => 'License',
+ 'invoice_balance' => 'Invoice Balance',
+ 'saved_design' => 'Successfully saved design',
+ 'client_details' => 'Client Details',
+ 'company_address' => 'Company Address',
+ 'quote_details' => 'Quote Details',
+ 'credit_details' => 'Credit Details',
+ 'product_columns' => 'Product Columns',
+ 'task_columns' => 'Task Columns',
+ 'add_field' => 'Add Field',
+ 'all_events' => 'All Events',
+ 'owned' => 'Owned',
+ 'payment_success' => 'Payment Success',
+ 'payment_failure' => 'Payment Failure',
+ 'quote_sent' => 'Quote Sent',
+ 'credit_sent' => 'Credit Sent',
+ 'invoice_viewed' => 'Invoice Viewed',
+ 'quote_viewed' => 'Quote Viewed',
+ 'credit_viewed' => 'Credit Viewed',
+ 'quote_approved' => 'Quote Approved',
+ 'receive_all_notifications' => 'Receive All Notifications',
+ 'purchase_license' => 'Purchase License',
+ 'enable_modules' => 'Enable Modules',
+ 'converted_quote' => 'Successfully converted quote',
+ 'credit_design' => 'Credit Design',
+ 'includes' => 'Includes',
+ 'css_framework' => 'CSS Framework',
+ 'custom_designs' => 'Custom Designs',
+ 'designs' => 'Designs',
+ 'new_design' => 'New Design',
+ 'edit_design' => 'Edit Design',
+ 'created_design' => 'Successfully created design',
+ 'updated_design' => 'Successfully updated design',
+ 'archived_design' => 'Successfully archived design',
+ 'deleted_design' => 'Successfully deleted design',
+ 'removed_design' => 'Successfully removed design',
+ 'restored_design' => 'Successfully restored design',
+ 'recurring_tasks' => 'Recurring Tasks',
+ 'removed_credit' => 'Successfully removed credit',
+ 'latest_version' => 'Latest Version',
+ 'update_now' => 'Update Now',
+ 'a_new_version_is_available' => 'A new version of the web app is available',
+ 'update_available' => 'Update Available',
+ 'app_updated' => 'Update successfully completed',
+ 'integrations' => 'Integrations',
+ 'tracking_id' => 'Tracking Id',
+ 'slack_webhook_url' => 'Slack Webhook URL',
+ 'partial_payment' => 'Partial Payment',
+ 'partial_payment_email' => 'Partial Payment Email',
+ 'clone_to_credit' => 'Clone to Credit',
+ 'emailed_credit' => 'Successfully emailed credit',
+ '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! 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',
+ 'view_pdf' => 'View PDF',
+ 'all_records' => 'All records',
+ 'owned_by_user' => 'Owned by user',
+ 'credit_remaining' => 'Credit Remaining',
+ 'use_default' => 'Use default',
+ 'reminder_endless' => 'Endless Reminders',
+ 'number_of_days' => 'Number of days',
+ 'configure_payment_terms' => 'Configure Payment Terms',
+ 'payment_term' => 'Payment Term',
+ 'new_payment_term' => 'New Payment Term',
+ 'deleted_payment_term' => 'Successfully deleted payment term',
+ 'removed_payment_term' => 'Successfully removed payment term',
+ 'restored_payment_term' => 'Successfully restored payment term',
+ 'full_width_editor' => 'Full Width Editor',
+ 'full_height_filter' => 'Full Height Filter',
+ 'email_sign_in' => 'Sign in with email',
+ 'change' => 'Change',
+ 'change_to_mobile_layout' => 'Change to the mobile layout?',
+ 'change_to_desktop_layout' => 'Change to the desktop layout?',
+ 'send_from_gmail' => 'Send from Gmail',
+ 'reversed' => 'Reversed',
+ 'cancelled' => 'Cancelled',
+ 'quote_amount' => 'Quote Amount',
+ 'hosted' => 'Hosted',
+ 'selfhosted' => 'Self-Hosted',
+ 'hide_menu' => 'Hide Menu',
+ 'show_menu' => 'Show Menu',
+ 'partially_refunded' => 'Partially Refunded',
+ 'search_documents' => 'Search Documents',
+ 'search_designs' => 'Search Designs',
+ 'search_invoices' => 'Search Invoices',
+ 'search_clients' => 'Search Clients',
+ 'search_products' => 'Search Products',
+ 'search_quotes' => 'Search Quotes',
+ 'search_credits' => 'Search Credits',
+ 'search_vendors' => 'Search Vendors',
+ 'search_users' => 'Search Users',
+ 'search_tax_rates' => 'Search Tax Rates',
+ 'search_tasks' => 'Search Tasks',
+ 'search_settings' => 'Search Settings',
+ 'search_projects' => 'Search Projects',
+ 'search_expenses' => 'Search Expenses',
+ 'search_payments' => 'Search Payments',
+ 'search_groups' => 'Search Groups',
+ 'search_company' => 'Search Company',
+ 'cancelled_invoice' => 'Successfully cancelled invoice',
+ 'cancelled_invoices' => 'Successfully cancelled invoices',
+ 'reversed_invoice' => 'Successfully reversed invoice',
+ 'reversed_invoices' => 'Successfully reversed invoices',
+ 'reverse' => 'Reverse',
+ 'filtered_by_project' => 'Filtered by Project',
+ 'google_sign_in' => 'Sign in with Google',
+ 'activity_58' => ':user reversed invoice :invoice',
+ 'activity_59' => ':user cancelled invoice :invoice',
+ 'payment_reconciliation_failure' => 'Reconciliation Failure',
+ 'payment_reconciliation_success' => 'Reconciliation Success',
+ 'gateway_success' => 'Gateway Success',
+ 'gateway_failure' => 'Gateway Failure',
+ 'gateway_error' => 'Gateway Error',
+ 'email_send' => 'Email Send',
+ 'email_retry_queue' => 'Email Retry Queue',
+ 'failure' => 'Failure',
+ 'quota_exceeded' => 'Quota Exceeded',
+ 'upstream_failure' => 'Upstream Failure',
+ 'system_logs' => 'System Logs',
+ 'copy_link' => 'Copy Link',
+ 'welcome_to_invoice_ninja' => 'Welcome to Invoice Ninja',
+ 'optin' => 'Opt-In',
+ 'optout' => 'Opt-Out',
+ 'auto_convert' => 'Auto Convert',
+ 'reminder1_sent' => 'Reminder 1 Sent',
+ 'reminder2_sent' => 'Reminder 2 Sent',
+ 'reminder3_sent' => 'Reminder 3 Sent',
+ 'reminder_last_sent' => 'Reminder Last Sent',
+ 'pdf_page_info' => 'Page :current of :total',
+ 'emailed_credits' => 'Successfully emailed credits',
+ 'view_in_stripe' => 'View in Stripe',
+ 'rows_per_page' => 'Rows Per Page',
+ 'apply_payment' => 'Apply Payment',
+ 'unapplied' => 'Unapplied',
+ 'custom_labels' => 'Custom Labels',
+ 'record_type' => 'Record Type',
+ 'record_name' => 'Record Name',
+ 'file_type' => 'File Type',
+ 'height' => 'Height',
+ 'width' => 'Width',
+ 'health_check' => 'Health Check',
+ 'last_login_at' => 'Last Login At',
+ 'company_key' => 'Company Key',
+ 'storefront' => 'Storefront',
+ 'storefront_help' => 'Enable third-party apps to create invoices',
+ 'count_records_selected' => ':count records selected',
+ 'count_record_selected' => ':count record selected',
+ 'client_created' => 'Client Created',
+ 'online_payment_email' => 'Online Payment Email',
+ 'manual_payment_email' => 'Manual Payment Email',
+ 'completed' => 'Completed',
+ 'gross' => 'Gross',
+ 'net_amount' => 'Net Amount',
+ 'net_balance' => 'Net Balance',
+ 'client_settings' => 'Client Settings',
+ 'selected_invoices' => 'Selected Invoices',
+ 'selected_payments' => 'Selected Payments',
+ 'selected_quotes' => 'Selected Quotes',
+ 'selected_tasks' => 'Selected Tasks',
+ 'selected_expenses' => 'Selected Expenses',
+ 'past_due_invoices' => 'Past Due Invoices',
+ 'create_payment' => 'Create Payment',
+ 'update_quote' => 'Update Quote',
+ 'update_invoice' => 'Update Invoice',
+ 'update_client' => 'Update Client',
+ 'update_vendor' => 'Update Vendor',
+ 'create_expense' => 'Create Expense',
+ 'update_expense' => 'Update Expense',
+ 'update_task' => 'Update Task',
+ 'approve_quote' => 'Approve Quote',
+ 'when_paid' => 'When Paid',
+ 'expires_on' => 'Expires On',
+ 'show_sidebar' => 'Show Sidebar',
+ 'hide_sidebar' => 'Hide Sidebar',
+ 'event_type' => 'Event Type',
+ 'copy' => 'Copy',
+ 'must_be_online' => 'Please restart the app once connected to the internet',
+ 'crons_not_enabled' => 'The crons need to be enabled',
+ 'api_webhooks' => 'API Webhooks',
+ 'search_webhooks' => 'Search :count Webhooks',
+ 'search_webhook' => 'Search 1 Webhook',
+ 'webhook' => 'Webhook',
+ 'webhooks' => 'Webhooks',
+ 'new_webhook' => 'New Webhook',
+ 'edit_webhook' => 'Edit Webhook',
+ 'created_webhook' => 'Successfully created webhook',
+ 'updated_webhook' => 'Successfully updated webhook',
+ 'archived_webhook' => 'Successfully archived webhook',
+ 'deleted_webhook' => 'Successfully deleted webhook',
+ 'removed_webhook' => 'Successfully removed webhook',
+ 'restored_webhook' => 'Successfully restored webhook',
+ 'search_tokens' => 'Search :count Tokens',
+ 'search_token' => 'Search 1 Token',
+ 'new_token' => 'New Token',
+ 'removed_token' => 'Successfully removed token',
+ 'restored_token' => 'Successfully restored token',
+ 'client_registration' => 'Client Registration',
+ 'client_registration_help' => 'Enable clients to self register in the portal',
+ 'customize_and_preview' => 'Customize & Preview',
+ 'search_document' => 'Search 1 Document',
+ 'search_design' => 'Search 1 Design',
+ 'search_invoice' => 'Search 1 Invoice',
+ 'search_client' => 'Search 1 Client',
+ 'search_product' => 'Search 1 Product',
+ 'search_quote' => 'Search 1 Quote',
+ 'search_credit' => 'Search 1 Credit',
+ 'search_vendor' => 'Search 1 Vendor',
+ 'search_user' => 'Search 1 User',
+ 'search_tax_rate' => 'Search 1 Tax Rate',
+ 'search_task' => 'Search 1 Tasks',
+ 'search_project' => 'Search 1 Project',
+ 'search_expense' => 'Search 1 Expense',
+ 'search_payment' => 'Search 1 Payment',
+ 'search_group' => 'Search 1 Group',
+ 'created_on' => 'Created On',
+ 'payment_status_-1' => 'Unapplied',
+ 'lock_invoices' => 'Lock Invoices',
+ 'show_table' => 'Show Table',
+ 'show_list' => 'Show List',
+ 'view_changes' => 'View Changes',
+ 'force_update' => 'Force Update',
+ 'force_update_help' => 'You are running the latest version but there may be pending fixes available.',
+ 'mark_paid_help' => 'Track the expense has been paid',
+ 'mark_invoiceable_help' => 'Enable the expense to be invoiced',
+ 'add_documents_to_invoice_help' => 'Make the documents visible to client',
+ 'convert_currency_help' => 'Set an exchange rate',
+ 'expense_settings' => 'Expense Settings',
+ 'clone_to_recurring' => 'Clone to Recurring',
+ 'crypto' => 'Crypto',
+ 'user_field' => 'User Field',
+ 'variables' => 'Variables',
+ 'show_password' => 'Show Password',
+ 'hide_password' => 'Hide Password',
+ 'copy_error' => 'Copy Error',
+ 'capture_card' => 'Capture Card',
+ 'auto_bill_enabled' => 'Auto Bill Enabled',
+ 'total_taxes' => 'Total Taxes',
+ 'line_taxes' => 'Line Taxes',
+ 'total_fields' => 'Total Fields',
+ 'stopped_recurring_invoice' => 'Successfully stopped recurring invoice',
+ 'started_recurring_invoice' => 'Successfully started recurring invoice',
+ 'resumed_recurring_invoice' => 'Successfully resumed recurring invoice',
+ 'gateway_refund' => 'Gateway Refund',
+ 'gateway_refund_help' => 'Process the refund with the payment gateway',
+ 'due_date_days' => 'Due Date',
+ 'paused' => 'Paused',
+ 'day_count' => 'Day :count',
+ 'first_day_of_the_month' => 'First Day of the Month',
+ 'last_day_of_the_month' => 'Last Day of the Month',
+ 'use_payment_terms' => 'Use Payment Terms',
+ 'endless' => 'Endless',
+ 'next_send_date' => 'Next Send Date',
+ 'remaining_cycles' => 'Remaining Cycles',
+ 'created_recurring_invoice' => 'Successfully created recurring invoice',
+ 'updated_recurring_invoice' => 'Successfully updated recurring invoice',
+ 'removed_recurring_invoice' => 'Successfully removed recurring invoice',
+ 'search_recurring_invoice' => 'Search 1 Recurring Invoice',
+ 'search_recurring_invoices' => 'Search :count Recurring Invoices',
+ 'send_date' => 'Send Date',
+ 'auto_bill_on' => 'Auto Bill On',
+ 'minimum_under_payment_amount' => 'Minimum Under Payment Amount',
+ 'allow_over_payment' => 'Allow Over Payment',
+ 'allow_over_payment_help' => 'Support paying extra to accept tips',
+ 'allow_under_payment' => 'Allow Under Payment',
+ 'allow_under_payment_help' => 'Support paying at minimum the partial/deposit amount',
+ 'test_mode' => 'Test Mode',
+ 'calculated_rate' => 'Calculated Rate',
+ 'default_task_rate' => 'Default Task Rate',
+ 'clear_cache' => 'Clear Cache',
+ 'sort_order' => 'Sort Order',
+ 'task_status' => 'Status',
+ 'task_statuses' => 'Task Statuses',
+ 'new_task_status' => 'New Task Status',
+ 'edit_task_status' => 'Edit Task Status',
+ 'created_task_status' => 'Successfully created task status',
+ 'archived_task_status' => 'Successfully archived task status',
+ 'deleted_task_status' => 'Successfully deleted task status',
+ 'removed_task_status' => 'Successfully removed task status',
+ 'restored_task_status' => 'Successfully restored task status',
+ 'search_task_status' => 'Search 1 Task Status',
+ 'search_task_statuses' => 'Search :count Task Statuses',
+ 'show_tasks_table' => 'Show Tasks Table',
+ 'show_tasks_table_help' => 'Always show the tasks section when creating invoices',
+ 'invoice_task_timelog' => 'Invoice Task Timelog',
+ 'invoice_task_timelog_help' => 'Add time details to the invoice line items',
+ 'auto_start_tasks_help' => 'Start tasks before saving',
+ 'configure_statuses' => 'Configure Statuses',
+ 'task_settings' => 'Task Settings',
+ 'configure_categories' => 'Configure Categories',
+ 'edit_expense_category' => 'Edit Expense Category',
+ 'removed_expense_category' => 'Successfully removed expense category',
+ 'search_expense_category' => 'Search 1 Expense Category',
+ 'search_expense_categories' => 'Search :count Expense Categories',
+ 'use_available_credits' => 'Use Available Credits',
+ 'show_option' => 'Show Option',
+ 'negative_payment_error' => 'The credit amount cannot exceed the payment amount',
+ 'should_be_invoiced_help' => 'Enable the expense to be invoiced',
+ 'configure_gateways' => 'Configure Gateways',
+ 'payment_partial' => 'Partial Payment',
+ 'is_running' => 'Is Running',
+ 'invoice_currency_id' => 'Invoice Currency ID',
+ 'tax_name1' => 'Tax Name 1',
+ 'tax_name2' => 'Tax Name 2',
+ 'transaction_id' => 'Transaction ID',
+ 'invoice_late' => 'Invoice Late',
+ 'quote_expired' => 'Quote Expired',
+ 'recurring_invoice_total' => 'Invoice Total',
+ 'actions' => 'Actions',
+ 'expense_number' => 'Expense Number',
+ 'task_number' => 'Task Number',
+ 'project_number' => 'Project Number',
+ 'view_settings' => 'View Settings',
+ 'company_disabled_warning' => 'Warning: this company has not yet been activated',
+ 'late_invoice' => 'Late Invoice',
+ 'expired_quote' => 'Expired Quote',
+ 'remind_invoice' => 'Remind Invoice',
+ 'client_phone' => 'Client Phone',
+ 'required_fields' => 'Required Fields',
+ 'enabled_modules' => 'Enabled Modules',
+ 'activity_60' => ':contact viewed quote :quote',
+ 'activity_61' => ':user updated client :client',
+ 'activity_62' => ':user updated vendor :vendor',
+ 'activity_63' => ':user emailed first reminder for invoice :invoice to :contact',
+ 'activity_64' => ':user emailed second reminder for invoice :invoice to :contact',
+ 'activity_65' => ':user emailed third reminder for invoice :invoice to :contact',
+ 'activity_66' => ':user emailed endless reminder for invoice :invoice to :contact',
+ 'expense_category_id' => 'Expense Category ID',
+ 'view_licenses' => 'View Licenses',
+ 'fullscreen_editor' => 'Fullscreen Editor',
+ 'sidebar_editor' => 'Sidebar Editor',
+ 'please_type_to_confirm' => 'Please type ":value" to confirm',
+ 'purge' => 'Purge',
+ 'clone_to' => 'Clone To',
+ 'clone_to_other' => 'Clone to Other',
+ 'labels' => 'Labels',
+ 'add_custom' => 'Add Custom',
+ 'payment_tax' => 'Payment Tax',
+ 'white_label' => 'White Label',
+ 'sent_invoices_are_locked' => 'Sent invoices are locked',
+ 'paid_invoices_are_locked' => 'Paid invoices are locked',
+ 'source_code' => 'Source Code',
+ 'app_platforms' => 'App Platforms',
+ 'archived_task_statuses' => 'Successfully archived :value task statuses',
+ 'deleted_task_statuses' => 'Successfully deleted :value task statuses',
+ 'restored_task_statuses' => 'Successfully restored :value task statuses',
+ 'deleted_expense_categories' => 'Successfully deleted expense :value categories',
+ 'restored_expense_categories' => 'Successfully restored expense :value categories',
+ 'archived_recurring_invoices' => 'Successfully archived recurring :value invoices',
+ 'deleted_recurring_invoices' => 'Successfully deleted recurring :value invoices',
+ 'restored_recurring_invoices' => 'Successfully restored recurring :value invoices',
+ 'archived_webhooks' => 'Successfully archived :value webhooks',
+ 'deleted_webhooks' => 'Successfully deleted :value webhooks',
+ 'removed_webhooks' => 'Successfully removed :value webhooks',
+ 'restored_webhooks' => 'Successfully restored :value webhooks',
+ 'api_docs' => 'API Docs',
+ 'archived_tokens' => 'Successfully archived :value tokens',
+ 'deleted_tokens' => 'Successfully deleted :value tokens',
+ 'restored_tokens' => 'Successfully restored :value tokens',
+ 'archived_payment_terms' => 'Successfully archived :value payment terms',
+ 'deleted_payment_terms' => 'Successfully deleted :value payment terms',
+ 'restored_payment_terms' => 'Successfully restored :value payment terms',
+ 'archived_designs' => 'Successfully archived :value designs',
+ 'deleted_designs' => 'Successfully deleted :value designs',
+ 'restored_designs' => 'Successfully restored :value designs',
+ 'restored_credits' => 'Successfully restored :value credits',
+ 'archived_users' => 'Successfully archived :value users',
+ 'deleted_users' => 'Successfully deleted :value users',
+ 'removed_users' => 'Successfully removed :value users',
+ 'restored_users' => 'Successfully restored :value users',
+ 'archived_tax_rates' => 'Successfully archived :value tax rates',
+ 'deleted_tax_rates' => 'Successfully deleted :value tax rates',
+ 'restored_tax_rates' => 'Successfully restored :value tax rates',
+ 'archived_company_gateways' => 'Successfully archived :value gateways',
+ 'deleted_company_gateways' => 'Successfully deleted :value gateways',
+ 'restored_company_gateways' => 'Successfully restored :value gateways',
+ 'archived_groups' => 'Successfully archived :value groups',
+ 'deleted_groups' => 'Successfully deleted :value groups',
+ 'restored_groups' => 'Successfully restored :value groups',
+ 'archived_documents' => 'Successfully archived :value documents',
+ 'deleted_documents' => 'Successfully deleted :value documents',
+ 'restored_documents' => 'Successfully restored :value documents',
+ 'restored_vendors' => 'Successfully restored :value vendors',
+ 'restored_expenses' => 'Successfully restored :value expenses',
+ 'restored_tasks' => 'Successfully restored :value tasks',
+ 'restored_projects' => 'Successfully restored :value projects',
+ 'restored_products' => 'Successfully restored :value products',
+ 'restored_clients' => 'Successfully restored :value clients',
+ 'restored_invoices' => 'Successfully restored :value invoices',
+ 'restored_payments' => 'Successfully restored :value payments',
+ 'restored_quotes' => 'Successfully restored :value quotes',
+ 'update_app' => 'Update App',
+ 'started_import' => 'Successfully started import',
+ 'duplicate_column_mapping' => 'Duplicate column mapping',
+ 'uses_inclusive_taxes' => 'Uses Inclusive Taxes',
+ 'is_amount_discount' => 'Is Amount Discount',
+ 'map_to' => 'Map To',
+ 'first_row_as_column_names' => 'Use first row as column names',
+ 'no_file_selected' => 'No File Selected',
+ 'import_type' => 'Import Type',
+ 'draft_mode' => 'Draft Mode',
+ 'draft_mode_help' => 'Preview updates faster but is less accurate',
+ 'show_product_discount' => 'Show Product Discount',
+ 'show_product_discount_help' => 'Display a line item discount field',
+ 'tax_name3' => 'Tax Name 3',
+ 'debug_mode_is_enabled' => 'Debug mode is enabled',
+ 'debug_mode_is_enabled_help' => 'Warning: it is intended for use on local machines, it can leak credentials. Click to learn more.',
+ 'running_tasks' => 'Running Tasks',
+ 'recent_tasks' => 'Recent Tasks',
+ 'recent_expenses' => 'Recent Expenses',
+ 'upcoming_expenses' => 'Upcoming Expenses',
+ 'search_payment_term' => 'Search 1 Payment Term',
+ 'search_payment_terms' => 'Search :count Payment Terms',
+ 'save_and_preview' => 'Save and Preview',
+ 'save_and_email' => 'Save and Email',
+ 'converted_balance' => 'Converted Balance',
+ 'is_sent' => 'Is Sent',
+ 'document_upload' => 'Document Upload',
+ 'document_upload_help' => 'Enable clients to upload documents',
+ 'expense_total' => 'Expense Total',
+ 'enter_taxes' => 'Enter Taxes',
+ 'by_rate' => 'By Rate',
+ 'by_amount' => 'By Amount',
+ 'enter_amount' => 'Enter Amount',
+ 'before_taxes' => 'Before Taxes',
+ 'after_taxes' => 'After Taxes',
+ 'color' => 'Color',
+ 'show' => 'Show',
+ 'empty_columns' => 'Empty Columns',
+ 'project_name' => 'Project Name',
+ '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',
+ 'show_product_cost' => 'Show Product Cost',
+ 'complete' => 'Complete',
+ 'next' => 'Next',
+ 'next_step' => 'Next step',
+ 'notification_credit_sent_subject' => 'Credit :invoice was sent to :client',
+ 'notification_credit_viewed_subject' => 'Credit :invoice was viewed by :client',
+ 'notification_credit_sent' => 'The following client :client was emailed Credit :invoice for :amount.',
+ 'notification_credit_viewed' => 'The following client :client viewed Credit :credit for :amount.',
+ 'reset_password_text' => 'Enter your email to reset your password.',
+ 'password_reset' => 'Password reset',
+ 'account_login_text' => 'Welcome back! Glad to see you.',
+ 'request_cancellation' => 'Request cancellation',
+ 'delete_payment_method' => 'Delete Payment Method',
+ 'about_to_delete_payment_method' => 'You are about to delete the payment method.',
+ 'action_cant_be_reversed' => 'Action can\'t be reversed',
+ 'profile_updated_successfully' => 'The profile has been updated successfully.',
+ 'currency_ethiopian_birr' => 'Ethiopian Birr',
+ 'client_information_text' => 'Use a permanent address where you can receive mail.',
+ 'status_id' => 'Invoice Status',
+ 'email_already_register' => 'This email is already linked to an account',
+ 'locations' => 'Locations',
+ 'freq_indefinitely' => 'Indefinitely',
+ 'cycles_remaining' => 'Cycles remaining',
+ 'i_understand_delete' => 'I understand, delete',
+ 'download_files' => 'Download Files',
+ 'download_timeframe' => 'Use this link to download your files, the link will expire in 1 hour.',
+ 'new_signup' => 'New Signup',
+ 'new_signup_text' => 'A new account has been created by :user - :email - from IP address: :ip',
+ 'notification_payment_paid_subject' => 'Payment was made by :client',
+ 'notification_partial_payment_paid_subject' => 'Partial payment was made by :client',
+ 'notification_payment_paid' => 'A payment of :amount was made by client :client towards :invoice',
+ 'notification_partial_payment_paid' => 'A partial payment of :amount was made by client :client towards :invoice',
+ 'notification_bot' => 'Notification Bot',
+ 'invoice_number_placeholder' => 'Invoice # :invoice',
+ 'entity_number_placeholder' => ':entity # :entity_number',
+ 'email_link_not_working' => 'If the button above isn\'t working for you, please click on the link',
+ 'display_log' => 'Display Log',
+ 'send_fail_logs_to_our_server' => 'Report errors in realtime',
+ 'setup' => 'Setup',
+ 'quick_overview_statistics' => 'Quick overview & statistics',
+ 'update_your_personal_info' => 'Update your personal information',
+ 'name_website_logo' => 'Name, website & logo',
+ 'make_sure_use_full_link' => 'Make sure you use full link to your site',
+ 'personal_address' => 'Personal address',
+ 'enter_your_personal_address' => 'Enter your personal address',
+ 'enter_your_shipping_address' => 'Enter your shipping address',
+ 'list_of_invoices' => 'List of invoices',
+ 'with_selected' => 'With selected',
+ 'invoice_still_unpaid' => 'This invoice is still not paid. Click the button to complete the payment',
+ '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 to 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.',
+ 'cancellation_pending' => 'Cancellation pending, we\'ll be in touch!',
+ 'list_of_payments' => 'List of payments',
+ 'payment_details' => 'Details of the payment',
+ 'list_of_payment_invoices' => 'List of invoices affected by the payment',
+ 'list_of_payment_methods' => 'List of payment methods',
+ 'payment_method_details' => 'Details of payment method',
+ 'permanently_remove_payment_method' => 'Permanently remove this payment method.',
+ 'warning_action_cannot_be_reversed' => 'Warning! This action can not be reversed!',
+ 'confirmation' => 'Confirmation',
+ 'list_of_quotes' => 'Quotes',
+ 'waiting_for_approval' => 'Waiting for approval',
+ 'quote_still_not_approved' => 'This quote is still not approved',
+ 'list_of_credits' => 'Credits',
+ 'required_extensions' => 'Required extensions',
+ 'php_version' => 'PHP version',
+ 'writable_env_file' => 'Writable .env file',
+ 'env_not_writable' => '.env file is not writable by the current user.',
+ 'minumum_php_version' => 'Minimum PHP version',
+ 'satisfy_requirements' => 'Make sure all requirements are satisfied.',
+ 'oops_issues' => 'Oops, something does not look right!',
+ 'open_in_new_tab' => 'Open in new tab',
+ 'complete_your_payment' => 'Complete payment',
+ 'authorize_for_future_use' => 'Authorize payment method for future use',
+ 'page' => 'Page',
+ 'per_page' => 'Per page',
+ 'of' => 'Of',
+ 'view_credit' => 'View Credit',
+ 'to_view_entity_password' => 'To view the :entity you need to enter password.',
+ 'showing_x_of' => 'Showing :first to :last out of :total results',
+ 'no_results' => 'No results found.',
+ 'payment_failed_subject' => 'Payment failed for Client :client',
+ 'payment_failed_body' => 'A payment made by client :client failed with message :message',
+ 'register' => 'Register',
+ 'register_label' => 'Create your account in seconds',
+ 'password_confirmation' => 'Confirm your password',
+ 'verification' => 'Verification',
+ 'complete_your_bank_account_verification' => 'Before using a bank account it must be verified.',
+ 'checkout_com' => 'Checkout.com',
+ 'footer_label' => 'Copyright © :year :company.',
+ 'credit_card_invalid' => 'Provided credit card number is not valid.',
+ 'month_invalid' => 'Provided month is not valid.',
+ 'year_invalid' => 'Provided year is not valid.',
+ 'https_required' => 'HTTPS is required, form will fail',
+ 'if_you_need_help' => 'If you need help you can post to our',
+ 'update_password_on_confirm' => 'After updating password, your account will be confirmed.',
+ 'bank_account_not_linked' => 'To pay with a bank account, first you have to add it as payment method.',
+ 'application_settings_label' => 'Let\'s store basic information about your Invoice Ninja!',
+ 'recommended_in_production' => 'Highly recommended in production',
+ 'enable_only_for_development' => 'Enable only for development',
+ 'test_pdf' => 'Test PDF',
+ 'checkout_authorize_label' => 'Checkout.com can be can saved as payment method for future use, once you complete your first transaction. Don\'t forget to check "Store credit card details" during payment process.',
+ 'sofort_authorize_label' => 'Bank account (SOFORT) can be can saved as payment method for future use, once you complete your first transaction. Don\'t forget to check "Store payment details" during payment process.',
+ 'node_status' => 'Node status',
+ 'npm_status' => 'NPM status',
+ 'node_status_not_found' => 'I could not find Node anywhere. Is it installed?',
+ 'npm_status_not_found' => 'I could not find NPM anywhere. Is it installed?',
+ 'locked_invoice' => 'This invoice is locked and unable to be modified',
+ 'downloads' => 'Downloads',
+ 'resource' => 'Resource',
+ 'document_details' => 'Details about the document',
+ 'hash' => 'Hash',
+ 'resources' => 'Resources',
+ 'allowed_file_types' => 'Allowed file types:',
+ 'common_codes' => 'Common codes and their meanings',
+ 'payment_error_code_20087' => '20087: Bad Track Data (invalid CVV and/or expiry date)',
+ 'download_selected' => 'Download selected',
+ 'to_pay_invoices' => 'To pay invoices, you have to',
+ 'add_payment_method_first' => 'add payment method',
+ 'no_items_selected' => 'No items selected.',
+ 'payment_due' => 'Payment due',
+ 'account_balance' => 'Account balance',
+ 'thanks' => 'Thanks',
+ 'minimum_required_payment' => 'Minimum required payment is :amount',
+ 'under_payments_disabled' => 'Company doesn\'t support under payments.',
+ 'over_payments_disabled' => 'Company doesn\'t support over payments.',
+ 'saved_at' => 'Saved at :time',
+ 'credit_payment' => 'Credit applied to Invoice :invoice_number',
+ 'credit_subject' => 'New credit :number from :account',
+ 'credit_message' => 'To view your credit for :amount, click the link below.',
+ 'payment_type_Crypto' => 'Cryptocurrency',
+ 'payment_type_Credit' => 'Credit',
+ 'store_for_future_use' => 'Store for future use',
+ 'pay_with_credit' => 'Pay with credit',
+ 'payment_method_saving_failed' => 'Payment method can\'t be saved for future use.',
+ 'pay_with' => 'Pay with',
+ 'n/a' => 'N/A',
+ 'by_clicking_next_you_accept_terms' => 'By clicking "Next step" you accept terms.',
+ 'not_specified' => 'Not specified',
+ 'before_proceeding_with_payment_warning' => 'Before proceeding with payment, you have to fill following fields',
+ 'after_completing_go_back_to_previous_page' => 'After completing, go back to previous page.',
+ 'pay' => 'Pay',
+ 'instructions' => 'Instructions',
+ 'notification_invoice_reminder1_sent_subject' => 'Reminder 1 for Invoice :invoice was sent to :client',
+ 'notification_invoice_reminder2_sent_subject' => 'Reminder 2 for Invoice :invoice was sent to :client',
+ 'notification_invoice_reminder3_sent_subject' => 'Reminder 3 for Invoice :invoice was sent to :client',
+ 'notification_invoice_reminder_endless_sent_subject' => 'Endless reminder for Invoice :invoice was sent to :client',
+ 'assigned_user' => 'Assigned User',
+ 'setup_steps_notice' => 'To proceed to next step, make sure you test each section.',
+ 'setup_phantomjs_note' => 'Note about Phantom JS. Read more.',
+ 'minimum_payment' => 'Minimum Payment',
+ 'no_action_provided' => 'No action provided. If you believe this is wrong, please contact the support.',
+ 'no_payable_invoices_selected' => 'No payable invoices selected. Make sure you are not trying to pay draft invoice or invoice with zero balance due.',
+ 'required_payment_information' => 'Required payment details',
+ 'required_payment_information_more' => 'To complete a payment we need more details about you.',
+ 'required_client_info_save_label' => 'We will save this, so you don\'t have to enter it next time.',
+ 'notification_credit_bounced' => 'We were unable to deliver Credit :invoice to :contact. \n :error',
+ 'notification_credit_bounced_subject' => 'Unable to deliver Credit :invoice',
+ 'save_payment_method_details' => 'Save payment method details',
+ 'new_card' => 'New card',
+ 'new_bank_account' => 'New bank account',
+ 'company_limit_reached' => 'Limit of :limit companies per account.',
+ 'credits_applied_validation' => 'Total credits applied cannot be MORE than total of invoices',
+ 'credit_number_taken' => 'Credit number already taken',
+ 'credit_not_found' => 'Credit not found',
+ 'invoices_dont_match_client' => 'Selected invoices are not from a single client',
+ 'duplicate_credits_submitted' => 'Duplicate credits submitted.',
+ 'duplicate_invoices_submitted' => 'Duplicate invoices submitted.',
+ 'credit_with_no_invoice' => 'You must have an invoice set when using a credit in a payment',
+ 'client_id_required' => 'Client id is required',
+ 'expense_number_taken' => 'Expense number already taken',
+ 'invoice_number_taken' => 'Invoice number already taken',
+ 'payment_id_required' => 'Payment `id` required.',
+ 'unable_to_retrieve_payment' => 'Unable to retrieve specified payment',
+ 'invoice_not_related_to_payment' => 'Invoice id :invoice is not related to this payment',
+ 'credit_not_related_to_payment' => 'Credit id :credit is not related to this payment',
+ 'max_refundable_invoice' => 'Attempting to refund more than allowed for invoice id :invoice, maximum refundable amount is :amount',
+ 'refund_without_invoices' => 'Attempting to refund a payment with invoices attached, please specify valid invoice/s to be refunded.',
+ 'refund_without_credits' => 'Attempting to refund a payment with credits attached, please specify valid credits/s to be refunded.',
+ 'max_refundable_credit' => 'Attempting to refund more than allowed for credit :credit, maximum refundable amount is :amount',
+ 'project_client_do_not_match' => 'Project client does not match entity client',
+ 'quote_number_taken' => 'Quote number already taken',
+ 'recurring_invoice_number_taken' => 'Recurring Invoice number :number already taken',
+ 'user_not_associated_with_account' => 'User not associated with this account',
+ 'amounts_do_not_balance' => 'Amounts do not balance correctly.',
+ 'insufficient_applied_amount_remaining' => 'Insufficient applied amount remaining to cover payment.',
+ 'insufficient_credit_balance' => 'Insufficient balance on credit.',
+ 'one_or_more_invoices_paid' => 'One or more of these invoices have been paid',
+ 'invoice_cannot_be_refunded' => 'Invoice id :number cannot be refunded',
+ 'attempted_refund_failed' => 'Attempting to refund :amount only :refundable_amount available for refund',
+ 'user_not_associated_with_this_account' => 'This user is unable to be attached to this company. Perhaps they have already registered a user on another account?',
+ 'migration_completed' => 'Migration completed',
+ 'migration_completed_description' => 'Your migration has completed, please review your data after logging in.',
+ 'api_404' => '404 | Nothing to see here!',
+ 'large_account_update_parameter' => 'Cannot load a large account without a updated_at parameter',
+ 'no_backup_exists' => 'No backup exists for this activity',
+ 'company_user_not_found' => 'Company User record not found',
+ 'no_credits_found' => 'No credits found.',
+ 'action_unavailable' => 'The requested action :action is not available.',
+ 'no_documents_found' => 'No Documents Found',
+ 'no_group_settings_found' => 'No group settings found',
+ 'access_denied' => 'Insufficient privileges to access/modify this resource',
+ 'invoice_cannot_be_marked_paid' => 'Invoice cannot be marked as paid',
+ 'invoice_license_or_environment' => 'Invalid license, or invalid environment :environment',
+ 'route_not_available' => 'Route not available',
+ 'invalid_design_object' => 'Invalid custom design object',
+ 'quote_not_found' => 'Quote/s not found',
+ 'quote_unapprovable' => 'Unable to approve this quote as it has expired.',
+ 'scheduler_has_run' => 'Scheduler has run',
+ 'scheduler_has_never_run' => 'Scheduler has never run',
+ 'self_update_not_available' => 'Self update not available on this system.',
+ 'user_detached' => 'User detached from company',
+ 'create_webhook_failure' => 'Failed to create Webhook',
+ '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?',
+ 'migration_select_company_label' => 'Select companies to migrate',
+ 'force_migration' => 'Force migration',
+ 'require_password_with_social_login' => 'Require Password with Social Login',
+ 'stay_logged_in' => 'Stay Logged In',
+ 'session_about_to_expire' => 'Warning: Your session is about to expire',
+ 'count_hours' => ':count Hours',
+ 'count_day' => '1 Day',
+ 'count_days' => ':count Days',
+ 'web_session_timeout' => 'Web Session Timeout',
+ 'security_settings' => 'Security Settings',
+ 'resend_email' => 'Resend Email',
+ 'confirm_your_email_address' => 'Please confirm your email address',
+ 'freshbooks' => 'FreshBooks',
+ 'invoice2go' => 'Invoice2go',
+ 'invoicely' => 'Invoicely',
+ 'waveaccounting' => 'Wave Accounting',
+ 'zoho' => 'Zoho',
+ 'accounting' => 'Accounting',
+ 'required_files_missing' => 'Please provide all CSVs.',
+ 'migration_auth_label' => 'Let\'s continue by authenticating.',
+ 'api_secret' => 'API secret',
+ 'migration_api_secret_notice' => 'You can find API_SECRET in the .env file or Invoice Ninja v5. If property is missing, leave field blank.',
+ 'billing_coupon_notice' => 'Your discount will be applied on the checkout.',
+ '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',
+ 'promo_code' => 'Promo code',
+ 'recurring_invoice_issued_to' => 'Recurring invoice issued to',
+ 'subscription' => 'Subscription',
+ 'new_subscription' => 'New Subscription',
+ 'deleted_subscription' => 'Successfully deleted subscription',
+ 'removed_subscription' => 'Successfully removed subscription',
+ 'restored_subscription' => 'Successfully restored subscription',
+ 'search_subscription' => 'Search 1 Subscription',
+ 'search_subscriptions' => 'Search :count Subscriptions',
+ 'subdomain_is_not_available' => 'Subdomain is not available',
+ 'connect_gmail' => 'Connect Gmail',
+ 'disconnect_gmail' => 'Disconnect Gmail',
+ 'connected_gmail' => 'Successfully connected Gmail',
+ 'disconnected_gmail' => 'Successfully disconnected Gmail',
+ 'update_fail_help' => 'Changes to the codebase may be blocking the update, you can run this command to discard the changes:',
+ 'client_id_number' => 'Client ID Number',
+ 'count_minutes' => ':count Minutes',
+ 'password_timeout' => 'Password Timeout',
+ 'shared_invoice_credit_counter' => 'Share Invoice/Credit Counter',
+ 'activity_80' => ':user created subscription :subscription',
+ 'activity_81' => ':user updated subscription :subscription',
+ 'activity_82' => ':user archived subscription :subscription',
+ 'activity_83' => ':user deleted subscription :subscription',
+ 'activity_84' => ':user restored subscription :subscription',
+ 'amount_greater_than_balance_v5' => 'The amount is greater than the invoice balance. You cannot overpay an invoice.',
+ 'click_to_continue' => 'Click to continue',
+ 'notification_invoice_created_body' => 'The following invoice :invoice was created for client :client for :amount.',
+ 'notification_invoice_created_subject' => 'Invoice :invoice was created for :client',
+ 'notification_quote_created_body' => 'The following quote :invoice was created for client :client for :amount.',
+ 'notification_quote_created_subject' => 'Quote :invoice was created for :client',
+ 'notification_credit_created_body' => 'The following credit :invoice was created for client :client for :amount.',
+ 'notification_credit_created_subject' => 'Credit :invoice was created for :client',
+ 'max_companies' => 'Maximum companies migrated',
+ 'max_companies_desc' => 'You have reached your maximum number of companies. Delete existing companies to migrate new ones.',
+ 'migration_already_completed' => 'Company already migrated',
+ 'migration_already_completed_desc' => 'Looks like you already migrated :company_name to the V5 version of the Invoice Ninja. In case you want to start over, you can force migrate to wipe existing data.',
+ 'payment_method_cannot_be_authorized_first' => 'This payment method can be can saved for future use, once you complete your first transaction. Don\'t forget to check "Store details" during payment process.',
+ 'new_account' => 'New account',
+ 'activity_100' => ':user created recurring invoice :recurring_invoice',
+ 'activity_101' => ':user updated recurring invoice :recurring_invoice',
+ 'activity_102' => ':user archived recurring invoice :recurring_invoice',
+ 'activity_103' => ':user deleted recurring invoice :recurring_invoice',
+ 'activity_104' => ':user restored recurring invoice :recurring_invoice',
+ 'new_login_detected' => 'New login detected for your account.',
+ 'new_login_description' => 'You recently logged in to your Invoice Ninja account from a new location or device: