Merge branch 'release/5.6.7'

# Conflicts:
#	.github/mergify.yml
This commit is contained in:
James Cole 2021-12-19 08:19:05 +01:00
commit 083c15b956
No known key found for this signature in database
GPG Key ID: BDE6667570EADBD5
104 changed files with 2106 additions and 1738 deletions

2
.github/mergify.yml vendored
View File

@ -10,4 +10,4 @@ pull_request_rules:
- base=main
actions:
close:
message: Do not open PR's on the main branch.
message: Please do not open PR's on the `main` branch, but on the `develop` branch only. Thank you!

View File

@ -365,19 +365,29 @@ class TransactionJournalFactory
$this->accountValidator->setTransactionType($transactionType);
// validate source account.
$sourceId = $data['source_id'] ? (int)$data['source_id'] : null;
$sourceName = $data['source_name'] ? (string)$data['source_name'] : null;
$validSource = $this->accountValidator->validateSource($sourceId, $sourceName, null);
$array = [
'id' => $data['source_id'] ? (int)$data['source_id'] : null,
'name' => $data['source_name'] ? (string)$data['source_name'] : null,
'iban' => $data['source_iban'] ? (string)$data['source_iban'] : null,
'number' => $data['source_number'] ? (string)$data['source_number'] : null,
];
$validSource = $this->accountValidator->validateSource($array);
// do something with result:
if (false === $validSource) {
throw new FireflyException(sprintf('Source: %s', $this->accountValidator->sourceError));
}
Log::debug('Source seems valid.');
// validate destination account
$destinationId = $data['destination_id'] ? (int)$data['destination_id'] : null;
$destinationName = $data['destination_name'] ? (string)$data['destination_name'] : null;
$validDestination = $this->accountValidator->validateDestination($destinationId, $destinationName, null);
$array = [
'id' => $data['destination_id'] ? (int)$data['destination_id'] : null,
'name' => $data['destination_name'] ? (string)$data['destination_name'] : null,
'iban' => $data['destination_iban'] ? (string)$data['destination_iban'] : null,
'number' => $data['destination_number'] ? (string)$data['destination_number'] : null,
];
$validDestination = $this->accountValidator->validateDestination($array);
// do something with result:
if (false === $validDestination) {
throw new FireflyException(sprintf('Destination: %s', $this->accountValidator->destError));

View File

@ -176,7 +176,9 @@ class AttachmentHelper implements AttachmentHelperInterface
return false;
}
// is allowed? Save the file, without encryption.
$this->uploadDisk->put($attachment->fileName(), $content);
$parts = explode('/', $attachment->fileName());
$file = $parts[count($parts) - 1];
$this->uploadDisk->put($file, $content);
// update attachment.
$attachment->md5 = md5_file($path);

View File

@ -119,4 +119,61 @@ trait TimeCollection
return $this;
}
public function yearIs(string $year): GroupCollectorInterface
{
$this->query->whereYear('transaction_journals.date', '=', $year);
return $this;
}
public function monthIs(string $month): GroupCollectorInterface
{
$this->query->whereMonth('transaction_journals.date', '=', $month);
return $this;
}
public function dayIs(string $day): GroupCollectorInterface
{
$this->query->whereDay('transaction_journals.date', '=', $day);
return $this;
}
public function yearBefore(string $year): GroupCollectorInterface
{
$this->query->whereYear('transaction_journals.date', '<=', $year);
return $this;
}
public function monthBefore(string $month): GroupCollectorInterface
{
$this->query->whereMonth('transaction_journals.date', '<=', $month);
return $this;
}
public function dayBefore(string $day): GroupCollectorInterface
{
$this->query->whereDay('transaction_journals.date', '<=', $day);
return $this;
}
public function yearAfter(string $year): GroupCollectorInterface
{
$this->query->whereYear('transaction_journals.date', '>=', $year);
return $this;
}
public function monthAfter(string $month): GroupCollectorInterface
{
$this->query->whereMonth('transaction_journals.date', '>=', $month);
return $this;
}
public function dayAfter(string $day): GroupCollectorInterface
{
$this->query->whereDay('transaction_journals.date', '>=', $day);
return $this;
}
}

View File

@ -239,6 +239,9 @@ class GroupCollector implements GroupCollectorInterface
{
$result = $this->query->get($this->fields);
//Log::debug('Query in full');
//$this->dumpQueryInLogs();
// now to parse this into an array.
$collection = $this->parseArray($result);
$this->total = $collection->count();
@ -559,6 +562,15 @@ class GroupCollector implements GroupCollectorInterface
echo '</pre>';
}
/**
*
*/
public function dumpQueryInLogs(): void
{
Log::debug($this->query->select($this->fields)->toSql()) ;
Log::debug('Bindings',$this->query->getBindings());
}
/**
* Convert a selected set of fields to arrays.
*

View File

@ -565,4 +565,15 @@ interface GroupCollectorInterface
*/
public function withoutTags(): GroupCollectorInterface;
public function yearIs(string $year): GroupCollectorInterface;
public function monthIs(string $month): GroupCollectorInterface;
public function dayIs(string $day): GroupCollectorInterface;
public function yearBefore(string $year): GroupCollectorInterface;
public function monthBefore(string $month): GroupCollectorInterface;
public function dayBefore(string $day): GroupCollectorInterface;
public function yearAfter(string $year): GroupCollectorInterface;
public function monthAfter(string $month): GroupCollectorInterface;
public function dayAfter(string $day): GroupCollectorInterface;
}

View File

@ -336,8 +336,8 @@ class ConvertController extends Controller
$sourceName = '' === $sourceName ? null : (string)$sourceName;
$destinationId = '' === $destinationId || null === $destinationId ? null : (int)$destinationId;
$destinationName = '' === $destinationName ? null : (string)$destinationName;
$validSource = $validator->validateSource($sourceId, $sourceName, null);
$validDestination = $validator->validateDestination($destinationId, $destinationName, null);
$validSource = $validator->validateSource(['id' => $sourceId, 'name' => $sourceName,]);
$validDestination = $validator->validateDestination(['id' => $destinationId, 'name' => $destinationName,]);
if (false === $validSource) {
throw new FireflyException(sprintf(trans('firefly.convert_invalid_source'), $journal->id));

View File

@ -26,7 +26,6 @@ namespace FireflyIII\Http\Controllers\Transaction;
use FireflyIII\Events\StoredTransactionGroup;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Http\Controllers\Controller;
use FireflyIII\Models\TransactionGroup;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface;
use FireflyIII\Services\Internal\Update\GroupCloneService;
@ -109,9 +108,9 @@ class CreateController extends Controller
$sourceId = (int)request()->get('source');
$destinationId = (int)request()->get('destination');
/** @var AccountRepositoryInterface $repository */
$repository = app(AccountRepositoryInterface::class);
$cash = $repository->getCashAccount();
/** @var AccountRepositoryInterface $accountRepository */
$accountRepository = app(AccountRepositoryInterface::class);
$cash = $accountRepository->getCashAccount();
$preFilled = session()->has('preFilled') ? session('preFilled') : [];
$subTitle = (string)trans(sprintf('breadcrumbs.create_%s', strtolower((string)$objectType)));
$subTitleIcon = 'fa-plus';

View File

@ -54,7 +54,7 @@ class StartFireflySession extends StartSession
//Log::debug(sprintf('storeCurrentUrl: Redirect is now "%s".', $safeUrl));
$session->setPreviousUrl($safeUrl);
return;
// return;
}
//Log::debug(sprintf('storeCurrentUrl: Refuse to set "%s" as current URL.', $safeUrl));
}

View File

@ -295,7 +295,7 @@ class RecurrenceFormRequest extends FormRequest
*/
public function validateAccountInformation(Validator $validator): void
{
Log::debug('Now in validateAccountInformation()');
Log::debug('Now in validateAccountInformation (RecurrenceFormRequest)()');
/** @var AccountValidator $accountValidator */
$accountValidator = app(AccountValidator::class);
$data = $validator->getData();
@ -326,7 +326,7 @@ class RecurrenceFormRequest extends FormRequest
break;
}
// validate source account.
$validSource = $accountValidator->validateSource($sourceId, null, null);
$validSource = $accountValidator->validateSource(['id' => $sourceId,]);
// do something with result:
if (false === $validSource) {
@ -338,7 +338,7 @@ class RecurrenceFormRequest extends FormRequest
}
// validate destination account
$validDestination = $accountValidator->validateDestination($destinationId, null, null);
$validDestination = $accountValidator->validateDestination(['id' => $destinationId,]);
// do something with result:
if (false === $validDestination) {
$message = (string)trans('validation.generic_invalid_destination');

View File

@ -494,10 +494,8 @@ class AccountRepository implements AccountRepositoryInterface
public function getOpeningBalanceGroup(Account $account): ?TransactionGroup
{
$journal = $this->getOpeningBalance($account);
$group = null;
$group = $journal?->transactionGroup;
return $group;
return $journal?->transactionGroup;
}
/**
@ -637,11 +635,9 @@ class AccountRepository implements AccountRepositoryInterface
*/
public function oldestJournalDate(Account $account): ?Carbon
{
$result = null;
$journal = $this->oldestJournal($account);
$result = $journal?->date;
return $result;
return $journal?->date;
}
/**

View File

@ -60,14 +60,14 @@ class IsTransferAccount implements Rule
$validator->setTransactionType(TransactionType::TRANSFER);
$validator->setUser(auth()->user());
$validAccount = $validator->validateSource(null, (string)$value, null);
$validAccount = $validator->validateSource(['name' => (string)$value,]);
if (true === $validAccount) {
Log::debug('Found account based on name. Return true.');
// found by name, use repos to return.
return true;
}
$validAccount = $validator->validateSource((int)$value, null, null);
$validAccount = $validator->validateSource(['id' => (int)$value,]);
Log::debug(sprintf('Search by id (%d), result is %s.', (int)$value, var_export($validAccount, true)));
return false !== $validAccount;

View File

@ -77,9 +77,9 @@ trait JournalServiceTrait
Log::debug(sprintf($message, $transactionType, $direction, implode(', ', $expectedTypes[$transactionType] ?? ['UNKNOWN']), $direction));
$result = $this->findAccountById($data, $expectedTypes[$transactionType]);
$result = $this->findAccountByName($result, $data, $expectedTypes[$transactionType]);
$result = $this->findAccountByIban($result, $data, $expectedTypes[$transactionType]);
$result = $this->findAccountByNumber($result, $data, $expectedTypes[$transactionType]);
$result = $this->findAccountByName($result, $data, $expectedTypes[$transactionType]);
$result = $this->createAccount($result, $data, $expectedTypes[$transactionType][0]);
return $this->getCashAccount($result, $data, $expectedTypes[$transactionType]);

View File

@ -136,11 +136,12 @@ trait RecurringTransactionTrait
$validator = app(AccountValidator::class);
$validator->setUser($recurrence->user);
$validator->setTransactionType($recurrence->transactionType->type);
if (!$validator->validateSource($source->id, null, null)) {
if (!$validator->validateSource(['id' => $source->id])) {
throw new FireflyException(sprintf('Source invalid: %s', $validator->sourceError));
}
if (!$validator->validateDestination($destination->id, null, null)) {
if (!$validator->validateDestination(['id' => $destination->id])) {
throw new FireflyException(sprintf('Destination invalid: %s', $validator->destError));
}
if (array_key_exists('foreign_amount', $array) && '' === (string)$array['foreign_amount']) {

View File

@ -215,7 +215,7 @@ class JournalUpdateService
$validator->setTransactionType($expectedType);
$validator->setUser($this->transactionJournal->user);
$result = $validator->validateSource($sourceId, $sourceName, null);
$result = $validator->validateSource(['id' =>$sourceId]);
Log::debug(sprintf('hasValidSourceAccount(%d, "%s") will return %s', $sourceId, $sourceName, var_export($result, true)));
// See reference nr. 95
@ -309,7 +309,7 @@ class JournalUpdateService
$validator->setTransactionType($expectedType);
$validator->setUser($this->transactionJournal->user);
$validator->source = $this->getValidSourceAccount();
$result = $validator->validateDestination($destId, $destName, null);
$result = $validator->validateDestination(['id' => $destId]);
Log::debug(sprintf('hasValidDestinationAccount(%d, "%s") will return %s', $destId, $destName, var_export($result, true)));
// See reference nr. 96

View File

@ -98,17 +98,17 @@ class ParseDateString
return $this->parseRelativeDate($date);
}
if ('xxxx-xx-xx' === strtolower($date)) {
throw new FireflyException(sprintf('[a]Not a recognised date format: "%s"', $date));
throw new FireflyException(sprintf('[a] Not a recognised date format: "%s"', $date));
}
// can't do a partial year:
$substrCount = substr_count(substr($date, 0, 4), 'x', 0);
if (10 === strlen($date) && $substrCount > 0 && $substrCount < 4) {
throw new FireflyException(sprintf('[b]Not a recognised date format: "%s"', $date));
throw new FireflyException(sprintf('[b] Not a recognised date format: "%s"', $date));
}
// maybe a date range
if (10 === strlen($date) && (str_contains($date, 'xx') || str_contains($date, 'xxxx'))) {
Log::debug(sprintf('[c]Detected a date range ("%s"), return a fake date.', $date));
Log::debug(sprintf('[c] Detected a date range ("%s"), return a fake date.', $date));
// very lazy way to parse the date without parsing it, because this specific function
// cant handle date ranges.
return new Carbon('1984-09-17');
@ -211,33 +211,31 @@ class ParseDateString
/**
* @param string $date
* @param Carbon $journalDate
*
* @return array
*/
public function parseRange(string $date, Carbon $journalDate): array
public function parseRange(string $date): array
{
// several types of range can be submitted
switch (true) {
default:
break;
case $this->isDayRange($date):
return $this->parseDayRange($date, $journalDate);
return $this->parseDayRange($date);
case $this->isMonthRange($date):
return $this->parseMonthRange($date, $journalDate);
return $this->parseMonthRange($date);
case $this->isYearRange($date):
return $this->parseYearRange($date, $journalDate);
return $this->parseYearRange($date);
case $this->isMonthDayRange($date):
return $this->parseMonthDayRange($date, $journalDate);
return $this->parseMonthDayRange($date);
case $this->isDayYearRange($date):
return $this->parseDayYearRange($date, $journalDate);
return $this->parseDayYearRange($date);
case $this->isMonthYearRange($date):
return $this->parseMonthYearRange($date, $journalDate);
return $this->parseMonthYearRange($date);
}
return [
'start' => new Carbon('1984-09-17'),
'end' => new Carbon('1984-09-17'),
'exact' => new Carbon('1984-09-17'),
];
}
@ -261,23 +259,18 @@ class ParseDateString
}
/**
* format of string is xxxx-xx-DD
*
* @param string $date
* @param Carbon $journalDate
*
* @return array
*/
protected function parseDayRange(string $date, Carbon $journalDate): array
protected function parseDayRange(string $date): array
{
// format of string is xxxx-xx-DD
$validDate = str_replace(['xxxx'], [$journalDate->year], $date);
$validDate = str_replace(['xx'], [$journalDate->format('m')], $validDate);
Log::debug(sprintf('parseDayRange: Parsed "%s" into "%s"', $date, $validDate));
$start = Carbon::createFromFormat('Y-m-d', $validDate)->startOfDay();
$end = Carbon::createFromFormat('Y-m-d', $validDate)->endOfDay();
$parts = explode('-', $date);
return [
'start' => $start,
'end' => $end,
'day' => $parts[2],
];
}
@ -301,29 +294,19 @@ class ParseDateString
}
/**
* format of string is xxxx-MM-xx
*
* @param string $date
* @param Carbon $journalDate
*
* @return array
*/
protected function parseMonthRange(string $date, Carbon $journalDate): array
protected function parseMonthRange(string $date): array
{
// because 31 would turn February into March unexpectedly and the exact day is irrelevant here.
$day = $journalDate->format('d');
if ((int)$day > 28) {
$day = '28';
}
// format of string is xxxx-MM-xx
$validDate = str_replace(['xxxx'], [$journalDate->year], $date);
$validDate = str_replace(['xx'], [$day], $validDate);
Log::debug(sprintf('parseMonthRange: Parsed "%s" into "%s"', $date, $validDate));
$start = Carbon::createFromFormat('Y-m-d', $validDate)->startOfMonth();
$end = Carbon::createFromFormat('Y-m-d', $validDate)->endOfMonth();
Log::debug(sprintf('parseMonthRange: Parsed "%s".', $date));
$parts = explode('-', $date);
return [
'start' => $start,
'end' => $end,
'month' => $parts[1],
];
}
@ -347,24 +330,19 @@ class ParseDateString
}
/**
* format of string is YYYY-xx-xx
*
* @param string $date
* @param Carbon $journalDate
*
* @return array
*/
protected function parseYearRange(string $date, Carbon $journalDate): array
protected function parseYearRange(string $date): array
{
// format of string is YYYY-xx-xx
// kind of a convulted way of replacing variables but I'm lazy.
$validDate = str_replace(['xx-xx'], [sprintf('%s-xx', $journalDate->format('m'))], $date);
$validDate = str_replace(['xx'], [$journalDate->format('d')], $validDate);
Log::debug(sprintf('parseYearRange: Parsed "%s" into "%s"', $date, $validDate));
$start = Carbon::createFromFormat('Y-m-d', $validDate)->startOfYear();
$end = Carbon::createFromFormat('Y-m-d', $validDate)->endOfYear();
Log::debug(sprintf('parseYearRange: Parsed "%s"', $date));
$parts = explode('-', $date);
return [
'start' => $start,
'end' => $end,
'year' => $parts[0],
];
}
@ -388,23 +366,20 @@ class ParseDateString
}
/**
* format of string is xxxx-MM-DD
*
* @param string $date
* @param Carbon $journalDate
*
* @return array
*/
private function parseMonthDayRange(string $date, Carbon $journalDate): array
private function parseMonthDayRange(string $date): array
{
// Any year.
// format of string is xxxx-MM-DD
$validDate = str_replace(['xxxx'], [$journalDate->year], $date);
Log::debug(sprintf('parseMonthDayRange: Parsed "%s" into "%s"', $date, $validDate));
$start = Carbon::createFromFormat('Y-m-d', $validDate)->startOfDay();
$end = Carbon::createFromFormat('Y-m-d', $validDate)->endOfDay();
Log::debug(sprintf('parseMonthDayRange: Parsed "%s".', $date));
$parts = explode('-', $date);
return [
'start' => $start,
'end' => $end,
'month' => $parts[1],
'day' => $parts[2],
];
}
@ -428,23 +403,20 @@ class ParseDateString
}
/**
* format of string is YYYY-xx-DD
*
* @param string $date
* @param Carbon $journalDate
*
* @return array
*/
private function parseDayYearRange(string $date, Carbon $journalDate): array
private function parseDayYearRange(string $date): array
{
// Any year.
// format of string is YYYY-xx-DD
$validDate = str_replace(['xx'], [$journalDate->format('m')], $date);
Log::debug(sprintf('parseDayYearRange: Parsed "%s" into "%s"', $date, $validDate));
$start = Carbon::createFromFormat('Y-m-d', $validDate)->startOfDay();
$end = Carbon::createFromFormat('Y-m-d', $validDate)->endOfDay();
Log::debug(sprintf('parseDayYearRange: Parsed "%s".', $date));
$parts = explode('-', $date);
return [
'start' => $start,
'end' => $end,
'year' => $parts[0],
'day' => $parts[2],
];
}
@ -468,28 +440,20 @@ class ParseDateString
}
/**
* format of string is YYYY-MM-xx
*
* @param string $date
* @param Carbon $journalDate
*
* @return array
*/
protected function parseMonthYearRange(string $date, Carbon $journalDate): array
protected function parseMonthYearRange(string $date): array
{
// because 31 would turn February into March unexpectedly and the exact day is irrelevant here.
$day = $journalDate->format('d');
if ((int)$day > 28) {
$day = '28';
}
// format of string is YYYY-MM-xx
$validDate = str_replace(['xx'], [$day], $date);
Log::debug(sprintf('parseMonthYearRange: Parsed "%s" into "%s"', $date, $validDate));
$start = Carbon::createFromFormat('Y-m-d', $validDate)->startOfMonth();
$end = Carbon::createFromFormat('Y-m-d', $validDate)->endOfMonth();
Log::debug(sprintf('parseMonthYearRange: Parsed "%s".', $date));
$parts = explode('-', $date);
return [
'start' => $start,
'end' => $end,
'year' => $parts[0],
'month' => $parts[1],
];
}

View File

@ -606,48 +606,15 @@ class OperatorQuerySearch implements SearchInterface
//
case 'date_is':
$range = $this->parseDateRange($value);
Log::debug(
sprintf(
'Set "%s" using collector with value "%s" (%s - %s)', $operator, $value, $range['start']->format('Y-m-d'),
$range['end']->format('Y-m-d')
)
);
$this->collector->setRange($range['start'], $range['end']);
// add to operators manually:
$this->operators->push(['type' => 'date_before', 'value' => $range['start']->format('Y-m-d'),]);
$this->operators->push(['type' => 'date_after', 'value' => $range['end']->format('Y-m-d'),]);
$this->setExactDateParams($range);
return false;
case 'date_before':
Log::debug(sprintf('Value for date_before is "%s"', $value));
$range = $this->parseDateRange($value);
Log::debug(
sprintf(
'Set "%s" using collector with value "%s" (%s - %s)', $operator, $value, $range['start']->format('Y-m-d'),
$range['end']->format('Y-m-d')
)
);
// add to operators manually:
$this->operators->push(['type' => 'date_before', 'value' => $range['start']->format('Y-m-d'),]);
$this->collector->setBefore($range['start']);
$this->setDateBeforeParams($range);
return false;
case 'date_after':
Log::debug(sprintf('Value for date_after is "%s"', $value));
$range = $this->parseDateRange($value);
Log::debug(
sprintf(
'Set "%s" using collector with value "%s" (%s - %s)', $operator, $value, $range['start']->format('Y-m-d'),
$range['end']->format('Y-m-d')
)
);
// add to operators manually:
$this->operators->push(['type' => 'date_after', 'value' => $range['end']->format('Y-m-d'),]);
$this->collector->setAfter($range['end']);
$this->setDateAfterParams($range);
return false;
case 'created_on':
Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value));
@ -867,13 +834,12 @@ class OperatorQuerySearch implements SearchInterface
{
$parser = new ParseDateString;
if ($parser->isDateRange($value)) {
return $parser->parseRange($value, $this->date);
return $parser->parseRange($value);
}
$parsedDate = $parser->parseDate($value);
return [
'start' => $parsedDate,
'end' => $parsedDate,
'exact' => $parsedDate,
];
}
@ -884,4 +850,119 @@ class OperatorQuerySearch implements SearchInterface
{
return $this->words;
}
/**
* @param array $range
*
* @throws FireflyException
*/
private function setExactDateParams(array $range): void
{
/**
* @var string $key
* @var Carbon|string $value
*/
foreach ($range as $key => $value) {
switch ($key) {
default:
throw new FireflyException(sprintf('Cannot handle key "%s" in setExactParameters()', $key));
case 'exact':
Log::debug(sprintf('Set date_is_exact value "%s"', $value->format('Y-m-d')));
$this->collector->setRange($value, $value);
$this->operators->push(['type' => 'date_is', 'value' => $value->format('Y-m-d'),]);
break;
case 'year':
Log::debug(sprintf('Set date_is_exact YEAR value "%s"', $value));
$this->collector->yearIs($value);
$this->operators->push(['type' => 'date_is_year', 'value' => $value,]);
break;
case 'month':
Log::debug(sprintf('Set date_is_exact MONTH value "%s"', $value));
$this->collector->monthIs($value);
$this->operators->push(['type' => 'date_is_month', 'value' => $value,]);
break;
case 'day':
Log::debug(sprintf('Set date_is_exact DAY value "%s"', $value));
$this->collector->dayIs($value);
$this->operators->push(['type' => 'date_is_day', 'value' => $value,]);
break;
}
}
}
/**
* @param array $range
*
* @throws FireflyException
*/
private function setDateBeforeParams(array $range): void
{
/**
* @var string $key
* @var Carbon|string $value
*/
foreach ($range as $key => $value) {
switch ($key) {
default:
throw new FireflyException(sprintf('Cannot handle key "%s" in setDateBeforeParams()', $key));
case 'exact':
$this->collector->setBefore($value);
$this->operators->push(['type' => 'date_before', 'value' => $value->format('Y-m-d'),]);
break;
case 'year':
Log::debug(sprintf('Set date_is_before YEAR value "%s"', $value));
$this->collector->yearBefore($value);
$this->operators->push(['type' => 'date_before_year', 'value' => $value,]);
break;
case 'month':
Log::debug(sprintf('Set date_is_before MONTH value "%s"', $value));
$this->collector->monthBefore($value);
$this->operators->push(['type' => 'date_before_month', 'value' => $value,]);
break;
case 'day':
Log::debug(sprintf('Set date_is_before DAY value "%s"', $value));
$this->collector->dayBefore($value);
$this->operators->push(['type' => 'date_before_day', 'value' => $value,]);
break;
}
}
}
/**
* @param array $range
*
* @throws FireflyException
*/
private function setDateAfterParams(array $range)
{
/**
* @var string $key
* @var Carbon|string $value
*/
foreach ($range as $key => $value) {
switch ($key) {
default:
throw new FireflyException(sprintf('Cannot handle key "%s" in setDateAfterParams()', $key));
case 'exact':
$this->collector->setAfter($value);
$this->operators->push(['type' => 'date_after', 'value' => $value->format('Y-m-d'),]);
break;
case 'year':
Log::debug(sprintf('Set date_is_after YEAR value "%s"', $value));
$this->collector->yearAfter($value);
$this->operators->push(['type' => 'date_after_year', 'value' => $value,]);
break;
case 'month':
Log::debug(sprintf('Set date_is_after MONTH value "%s"', $value));
$this->collector->monthAfter($value);
$this->operators->push(['type' => 'date_after_month', 'value' => $value,]);
break;
case 'day':
Log::debug(sprintf('Set date_is_after DAY value "%s"', $value));
$this->collector->dayAfter($value);
$this->operators->push(['type' => 'date_after_day', 'value' => $value,]);
break;
}
}
}
}

View File

@ -41,23 +41,24 @@ trait DepositValidation
/**
* @param array $validTypes
* @param int $accountId
* @param string $accountName
* @param array $data
*
* @return Account|null
*/
abstract protected function findExistingAccount(array $validTypes, int $accountId, string $accountName): ?Account;
abstract protected function findExistingAccount(array $validTypes, array $data): ?Account;
/**
* @param int|null $accountId
* @param mixed $accountName
* @param array $array
*
* @return bool
*/
protected function validateDepositDestination(?int $accountId, $accountName): bool
protected function validateDepositDestination(array $array): bool
{
$result = null;
Log::debug(sprintf('Now in validateDepositDestination(%d, "%s")', $accountId, $accountName));
$result = null;
$accountId = array_key_exists('id', $array) ? $array['id'] : null;
$accountName = array_key_exists('name', $array) ? $array['name'] : null;
Log::debug('Now in validateDepositDestination', $array);
// source can be any of the following types.
$validTypes = $this->combinations[$this->transactionType][$this->source->accountType->type] ?? [];
@ -76,7 +77,7 @@ trait DepositValidation
if (null === $result) {
// otherwise try to find the account:
$search = $this->findExistingAccount($validTypes, (int)$accountId, (string)$accountName);
$search = $this->findExistingAccount($validTypes, $array);
if (null === $search) {
Log::debug('findExistingAccount() returned NULL, so the result is false.');
$this->destError = (string)trans('validation.deposit_dest_bad_data', ['id' => $accountId, 'name' => $accountName]);
@ -89,20 +90,23 @@ trait DepositValidation
}
}
$result = $result ?? false;
Log::debug(sprintf('validateDepositDestination(%d, "%s") will return %s', $accountId, $accountName, var_export($result, true)));
Log::debug(sprintf('validateDepositDestination will return %s', var_export($result, true)));
return $result;
}
/**
* @param int|null $accountId
* @param string|null $accountName
* @param array $array
*
* @return bool
*/
protected function validateDepositSource(?int $accountId, ?string $accountName): bool
protected function validateDepositSource(array $array): bool
{
Log::debug(sprintf('Now in validateDepositSource(%d, "%s")', $accountId, $accountName));
$accountId = array_key_exists('id', $array) ? $array['id'] : null;
$accountName = array_key_exists('name', $array) ? $array['name'] : null;
$accountIban = array_key_exists('iban', $array) ? $array['iban'] : null;
$accountNumber = array_key_exists('number', $array) ? $array['number'] : null;
Log::debug('Now in validateDepositSource', $array);
$result = null;
// source can be any of the following types.
$validTypes = array_keys($this->combinations[$this->transactionType]);
@ -114,12 +118,32 @@ trait DepositValidation
$result = false;
}
// if the user submits an ID only but that ID is not of the correct type,
// if the user submits an ID, but that ID is not of the correct type,
// return false.
if (null !== $accountId && null === $accountName) {
if (null !== $accountId) {
$search = $this->accountRepository->find($accountId);
if (null !== $search && !in_array($search->accountType->type, $validTypes, true)) {
Log::debug(sprintf('User submitted only an ID (#%d), which is a "%s", so this is not a valid source.', $accountId, $search->accountType->type));
Log::debug(sprintf('User submitted an ID (#%d), which is a "%s", so this is not a valid source.', $accountId, $search->accountType->type));
$result = false;
}
}
// if user submits an IBAN:
if (null !== $accountIban) {
$search = $this->accountRepository->findByIbanNull($accountIban, $validTypes);
if (null !== $search && !in_array($search->accountType->type, $validTypes, true)) {
Log::debug(sprintf('User submitted IBAN ("%s"), which is a "%s", so this is not a valid source.', $accountIban, $search->accountType->type));
$result = false;
}
}
// if user submits a number:
if (null !== $accountNumber) {
$search = $this->accountRepository->findByAccountNumber($accountNumber, $validTypes);
if (null !== $search && !in_array($search->accountType->type, $validTypes, true)) {
Log::debug(
sprintf('User submitted number ("%s"), which is a "%s", so this is not a valid source.', $accountNumber, $search->accountType->type)
);
$result = false;
}
}

View File

@ -36,14 +36,15 @@ trait LiabilityValidation
{
/**
* @param int|null $accountId
* @param array $array
*
* @return bool
*/
protected function validateLCDestination(?int $accountId): bool
protected function validateLCDestination(array $array): bool
{
Log::debug(sprintf('Now in validateLCDestination(%d)', $accountId));
Log::debug('Now in validateLCDestination', $array);
$result = null;
$accountId = array_key_exists('id', $array) ? $array['id'] : null;
$validTypes = config('firefly.valid_liabilities');
if (null === $accountId) {
@ -74,14 +75,15 @@ trait LiabilityValidation
/**
* Source of an liability credit must be a liability.
*
* @param string|null $accountName
* @param array $array
*
* @return bool
*/
protected function validateLCSource(?string $accountName): bool
protected function validateLCSource(array $array): bool
{
$accountName = array_key_exists('name', $array) ? $array['name'] : null;
$result = true;
Log::debug(sprintf('Now in validateLCDestination("%s")', $accountName));
Log::debug('Now in validateLCDestination', $array);
if ('' === $accountName || null === $accountName) {
$result = false;
}

View File

@ -41,15 +41,16 @@ trait OBValidation
abstract protected function canCreateTypes(array $accountTypes): bool;
/**
* @param int|null $accountId
* @param mixed $accountName
* @param array $array
*
* @return bool
*/
protected function validateOBDestination(?int $accountId, $accountName): bool
protected function validateOBDestination(array $array): bool
{
$result = null;
Log::debug(sprintf('Now in validateOBDestination(%d, "%s")', $accountId, $accountName));
$result = null;
$accountId = array_key_exists('id', $array) ? $array['id'] : null;
$accountName = array_key_exists('name', $array) ? $array['name'] : null;
Log::debug('Now in validateOBDestination', $array);
// source can be any of the following types.
$validTypes = $this->combinations[$this->transactionType][$this->source->accountType->type] ?? [];
@ -68,7 +69,7 @@ trait OBValidation
if (null === $result) {
// otherwise try to find the account:
$search = $this->findExistingAccount($validTypes, (int)$accountId, (string)$accountName);
$search = $this->findExistingAccount($validTypes, $array);
if (null === $search) {
Log::debug('findExistingAccount() returned NULL, so the result is false.', $validTypes);
$this->destError = (string)trans('validation.ob_dest_bad_data', ['id' => $accountId, 'name' => $accountName]);
@ -90,15 +91,15 @@ trait OBValidation
* Source of an opening balance can either be an asset account
* or an "initial balance account". The latter can be created.
*
* @param int|null $accountId
* @param string|null $accountName
* @param array $array
*
* @return bool
*/
protected function validateOBSource(?int $accountId, ?string $accountName): bool
protected function validateOBSource(array $array): bool
{
Log::debug(sprintf('Now in validateOBSource(%d, "%s")', $accountId, $accountName));
Log::debug(sprintf('The account name is null: %s', var_export(null === $accountName, true)));
$accountId = array_key_exists('id', $array) ? $array['id'] : null;
$accountName = array_key_exists('name', $array) ? $array['name'] : null;
Log::debug('Now in validateOBSource', $array);
$result = null;
// source can be any of the following types.
$validTypes = array_keys($this->combinations[$this->transactionType]);

View File

@ -24,6 +24,7 @@ declare(strict_types=1);
namespace FireflyIII\Validation\Account;
use FireflyIII\Models\Account;
use FireflyIII\Models\AccountType;
use Log;
@ -32,15 +33,17 @@ use Log;
*/
trait ReconciliationValidation
{
public ?Account $destination;
public ?Account $source;
/**
* @param int|null $accountId
* @param array $array
*
* @return bool
*/
protected function validateReconciliationDestination(?int $accountId): bool
protected function validateReconciliationDestination(array $array): bool
{
Log::debug('Now in validateReconciliationDestination');
$accountId = array_key_exists('id', $array) ? $array['id'] : null;
Log::debug('Now in validateReconciliationDestination', $array);
if (null === $accountId) {
Log::debug('Return FALSE');
@ -80,13 +83,14 @@ trait ReconciliationValidation
}
/**
* @param int|null $accountId
* @param array $array
*
* @return bool
*/
protected function validateReconciliationSource(?int $accountId): bool
protected function validateReconciliationSource(array $array): bool
{
Log::debug('In validateReconciliationSource');
$accountId = array_key_exists('id', $array) ? $array['id'] : null;
Log::debug('In validateReconciliationSource', $array);
if (null === $accountId) {
Log::debug('Return FALSE');

View File

@ -40,22 +40,22 @@ trait TransferValidation
/**
* @param array $validTypes
* @param int $accountId
* @param string $accountName
* @param array $data
*
* @return Account|null
*/
abstract protected function findExistingAccount(array $validTypes, int $accountId, string $accountName): ?Account;
abstract protected function findExistingAccount(array $validTypes, array $data): ?Account;
/**
* @param int|null $accountId
* @param mixed $accountName
* @param array $array
*
* @return bool
*/
protected function validateTransferDestination(?int $accountId, $accountName): bool
protected function validateTransferDestination(array $array): bool
{
Log::debug(sprintf('Now in validateTransferDestination(%d, "%s")', $accountId, $accountName));
$accountId = array_key_exists('id', $array) ? $array['id'] : null;
$accountName = array_key_exists('name', $array) ? $array['name'] : null;
Log::debug('Now in validateTransferDestination', $array);
// source can be any of the following types.
$validTypes = $this->combinations[$this->transactionType][$this->source->accountType->type] ?? [];
if (null === $accountId && null === $accountName && false === $this->canCreateTypes($validTypes)) {
@ -68,7 +68,7 @@ trait TransferValidation
}
// or try to find the account:
$search = $this->findExistingAccount($validTypes, (int)$accountId, (string)$accountName);
$search = $this->findExistingAccount($validTypes,$array);
if (null === $search) {
$this->destError = (string)trans('validation.transfer_dest_bad_data', ['id' => $accountId, 'name' => $accountName]);
@ -88,14 +88,15 @@ trait TransferValidation
}
/**
* @param int|null $accountId
* @param string|null $accountName
* @param array $array
*
* @return bool
*/
protected function validateTransferSource(?int $accountId, ?string $accountName): bool
protected function validateTransferSource(array $array): bool
{
Log::debug(sprintf('Now in validateTransferSource(%d, "%s")', $accountId, $accountName));
$accountId = array_key_exists('id', $array) ? $array['id'] : null;
$accountName = array_key_exists('name', $array) ? $array['name'] : null;
Log::debug('Now in validateTransferSource', $array);
// source can be any of the following types.
$validTypes = array_keys($this->combinations[$this->transactionType]);
if (null === $accountId && null === $accountName && false === $this->canCreateTypes($validTypes)) {
@ -108,7 +109,7 @@ trait TransferValidation
}
// otherwise try to find the account:
$search = $this->findExistingAccount($validTypes, (int)$accountId, (string)$accountName);
$search = $this->findExistingAccount($validTypes, $array);
if (null === $search) {
$this->sourceError = (string)trans('validation.transfer_source_bad_data', ['id' => $accountId, 'name' => $accountName]);
Log::warning('Not a valid source, cant find it.', $validTypes);

View File

@ -41,22 +41,22 @@ trait WithdrawalValidation
/**
* @param array $validTypes
* @param int $accountId
* @param string $accountName
* @param array $data
*
* @return Account|null
*/
abstract protected function findExistingAccount(array $validTypes, int $accountId, string $accountName): ?Account;
abstract protected function findExistingAccount(array $validTypes, array $data): ?Account;
/**
* @param int|null $accountId
* @param string|null $accountName
* @param array $array
*
* @return bool
*/
protected function validateGenericSource(?int $accountId, ?string $accountName): bool
protected function validateGenericSource(array $array): bool
{
Log::debug(sprintf('Now in validateGenericSource(%d, "%s")', $accountId, $accountName));
$accountId = array_key_exists('id', $array) ? $array['id'] : null;
$accountName = array_key_exists('name', $array) ? $array['name'] : null;
Log::debug('Now in validateGenericSource', $array);
// source can be any of the following types.
$validTypes = [AccountType::ASSET, AccountType::REVENUE, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE];
if (null === $accountId && null === $accountName && false === $this->canCreateTypes($validTypes)) {
@ -69,7 +69,7 @@ trait WithdrawalValidation
}
// otherwise try to find the account:
$search = $this->findExistingAccount($validTypes, (int)$accountId, (string)$accountName);
$search = $this->findExistingAccount($validTypes, $array);
if (null === $search) {
$this->sourceError = (string)trans('validation.withdrawal_source_bad_data', ['id' => $accountId, 'name' => $accountName]);
Log::warning('Not a valid source. Cant find it.', $validTypes);
@ -83,14 +83,15 @@ trait WithdrawalValidation
}
/**
* @param int|null $accountId
* @param string|null $accountName
* @param array $array
*
* @return bool
*/
protected function validateWithdrawalDestination(?int $accountId, ?string $accountName): bool
protected function validateWithdrawalDestination(array $array): bool
{
Log::debug(sprintf('Now in validateWithdrawalDestination(%d, "%s")', $accountId, $accountName));
$accountId = array_key_exists('id', $array) ? $array['id'] : null;
$accountName = array_key_exists('name', $array) ? $array['name'] : null;
Log::debug('Now in validateWithdrawalDestination()', $array);
// source can be any of the following types.
$validTypes = $this->combinations[$this->transactionType][$this->source->accountType->type] ?? [];
if (null === $accountId && null === $accountName && false === $this->canCreateTypes($validTypes)) {
@ -120,14 +121,16 @@ trait WithdrawalValidation
}
/**
* @param int|null $accountId
* @param string|null $accountName
* @param array $array
*
* @return bool
*/
protected function validateWithdrawalSource(?int $accountId, ?string $accountName): bool
protected function validateWithdrawalSource(array $array): bool
{
Log::debug(sprintf('Now in validateWithdrawalSource(%d, "%s")', $accountId, $accountName));
$accountId = array_key_exists('id', $array) ? $array['id'] : null;
$accountName = array_key_exists('name', $array) ? $array['name'] : null;
Log::debug('Now in validateWithdrawalSource', $array);
// source can be any of the following types.
$validTypes = array_keys($this->combinations[$this->transactionType]);
if (null === $accountId && null === $accountName && false === $this->canCreateTypes($validTypes)) {
@ -140,7 +143,7 @@ trait WithdrawalValidation
}
// otherwise try to find the account:
$search = $this->findExistingAccount($validTypes, (int)$accountId, (string)$accountName);
$search = $this->findExistingAccount($validTypes, $array);
if (null === $search) {
$this->sourceError = (string)trans('validation.withdrawal_source_bad_data', ['id' => $accountId, 'name' => $accountName]);
Log::warning('Not a valid source. Cant find it.', $validTypes);

View File

@ -95,15 +95,13 @@ class AccountValidator
}
/**
* @param int|null $accountId
* @param string|null $accountName
* @param string|null $accountIban
* @param array $array
*
* @return bool
*/
public function validateDestination(?int $accountId, ?string $accountName, ?string $accountIban): bool
public function validateDestination(array $array): bool
{
Log::debug(sprintf('Now in AccountValidator::validateDestination(%d, "%s", "%s")', $accountId, $accountName, $accountIban));
Log::debug('Now in AccountValidator::validateDestination()', $array);
if (null === $this->source) {
Log::error('Source is NULL, always FALSE.');
$this->destError = 'No source account validation has taken place yet. Please do this first or overrule the object.';
@ -119,22 +117,22 @@ class AccountValidator
break;
case TransactionType::WITHDRAWAL:
$result = $this->validateWithdrawalDestination($accountId, $accountName);
$result = $this->validateWithdrawalDestination($array);
break;
case TransactionType::DEPOSIT:
$result = $this->validateDepositDestination($accountId, $accountName);
$result = $this->validateDepositDestination($array);
break;
case TransactionType::TRANSFER:
$result = $this->validateTransferDestination($accountId, $accountName);
$result = $this->validateTransferDestination($array);
break;
case TransactionType::OPENING_BALANCE:
$result = $this->validateOBDestination($accountId, $accountName);
$result = $this->validateOBDestination($array);
break;
case TransactionType::LIABILITY_CREDIT:
$result = $this->validateLCDestination($accountId);
$result = $this->validateLCDestination($array);
break;
case TransactionType::RECONCILIATION:
$result = $this->validateReconciliationDestination($accountId);
$result = $this->validateReconciliationDestination($array);
break;
}
@ -142,39 +140,37 @@ class AccountValidator
}
/**
* @param int|null $accountId
* @param string|null $accountName
* @param string|null $accountIban
* @param array $array
*
* @return bool
*/
public function validateSource(?int $accountId, ?string $accountName, ?string $accountIban): bool
public function validateSource(array $array): bool
{
Log::debug(sprintf('Now in AccountValidator::validateSource(%d, "%s", "%s")', $accountId, $accountName, $accountIban));
Log::debug('Now in AccountValidator::validateSource()', $array);
switch ($this->transactionType) {
default:
Log::error(sprintf('AccountValidator::validateSource cannot handle "%s", so it will do a generic check.', $this->transactionType));
$result = $this->validateGenericSource($accountId, $accountName);
$result = $this->validateGenericSource($array);
break;
case TransactionType::WITHDRAWAL:
$result = $this->validateWithdrawalSource($accountId, $accountName);
$result = $this->validateWithdrawalSource($array);
break;
case TransactionType::DEPOSIT:
$result = $this->validateDepositSource($accountId, $accountName);
$result = $this->validateDepositSource($array);
break;
case TransactionType::TRANSFER:
$result = $this->validateTransferSource($accountId, $accountName);
$result = $this->validateTransferSource($array);
break;
case TransactionType::OPENING_BALANCE:
$result = $this->validateOBSource($accountId, $accountName);
$result = $this->validateOBSource($array);
break;
case TransactionType::LIABILITY_CREDIT:
$result = $this->validateLCSource($accountName);
$result = $this->validateLCSource($array);
break;
case TransactionType::RECONCILIATION:
Log::debug('Calling validateReconciliationSource');
$result = $this->validateReconciliationSource($accountId);
$result = $this->validateReconciliationSource($array);
break;
}
@ -203,22 +199,43 @@ class AccountValidator
}
/**
* @param array $validTypes
* @param int $accountId
* @param string $accountName
* @param array $validTypes
* @param array $data
*
* @return Account|null
*/
protected function findExistingAccount(array $validTypes, int $accountId, string $accountName): ?Account
protected function findExistingAccount(array $validTypes, array $data): ?Account
{
Log::debug('Now in findExistingAccount', $data);
$accountId = array_key_exists('id', $data) ? $data['id'] : null;
$accountIban = array_key_exists('iban', $data) ? $data['iban'] : null;
$accountNumber = array_key_exists('number', $data) ? $data['number'] : null;
$accountName = array_key_exists('name', $data) ? $data['name'] : null;
// find by ID
if ($accountId > 0) {
if (null !== $accountId && $accountId > 0) {
$first = $this->accountRepository->find($accountId);
if ((null !== $first) && in_array($first->accountType->type, $validTypes, true)) {
return $first;
}
}
// find by iban
if (null !== $accountIban && '' !== $accountIban) {
$first = $this->accountRepository->findByIbanNull($accountIban, $validTypes);
if ((null !== $first) && in_array($first->accountType->type, $validTypes, true)) {
return $first;
}
}
// find by number
if (null !== $accountNumber && '' !== $accountNumber) {
$first = $this->accountRepository->findByAccountNumber($accountNumber, $validTypes);
if ((null !== $first) && in_array($first->accountType->type, $validTypes, true)) {
return $first;
}
}
// find by name:
if ('' !== $accountName) {
return $this->accountRepository->findByName($accountName, $validTypes);

View File

@ -105,7 +105,7 @@ trait RecurrenceValidation
// validate destination account
$destinationId = array_key_exists('destination_id', $transaction) ? (int)$transaction['destination_id'] : null;
$destinationName = $transaction['destination_name'] ?? null;
$validDestination = $accountValidator->validateDestination($destinationId, $destinationName, null);
$validDestination = $accountValidator->validateDestination(['id' => $destinationId, 'name' => $destinationName,]);
// do something with result:
if (false === $validDestination) {
$validator->errors()->add(sprintf('transactions.%d.destination_id', $index), $accountValidator->destError);

View File

@ -42,7 +42,7 @@ trait TransactionValidation
*/
public function validateAccountInformation(Validator $validator): void
{
Log::debug('Now in validateAccountInformation()');
Log::debug('Now in validateAccountInformation (TransactionValidation) ()');
$transactions = $this->getTransactionsArray($validator);
$data = $validator->getData();
@ -100,10 +100,17 @@ trait TransactionValidation
$accountValidator->setTransactionType($transactionType);
// validate source account.
$sourceId = array_key_exists('source_id', $transaction) ? (int)$transaction['source_id'] : null;
$sourceName = array_key_exists('source_name', $transaction) ? (string)$transaction['source_name'] : null;
$sourceIban = array_key_exists('source_iban', $transaction) ? (string)$transaction['source_iban'] : null;
$validSource = $accountValidator->validateSource($sourceId, $sourceName, $sourceIban);
$sourceId = array_key_exists('source_id', $transaction) ? (int)$transaction['source_id'] : null;
$sourceName = array_key_exists('source_name', $transaction) ? (string)$transaction['source_name'] : null;
$sourceIban = array_key_exists('source_iban', $transaction) ? (string)$transaction['source_iban'] : null;
$sourceNumber = array_key_exists('source_number', $transaction) ? (string)$transaction['source_number'] : null;
$array = [
'id' => $sourceId,
'name' => $sourceName,
'iban' => $sourceIban,
'number' => $sourceNumber,
];
$validSource = $accountValidator->validateSource($array);
// do something with result:
if (false === $validSource) {
@ -113,10 +120,17 @@ trait TransactionValidation
return;
}
// validate destination account
$destinationId = array_key_exists('destination_id', $transaction) ? (int)$transaction['destination_id'] : null;
$destinationName = array_key_exists('destination_name', $transaction) ? (string)$transaction['destination_name'] : null;
$destinationIban = array_key_exists('destination_iban', $transaction) ? (string)$transaction['destination_iban'] : null;
$validDestination = $accountValidator->validateDestination($destinationId, $destinationName, $destinationIban);
$destinationId = array_key_exists('destination_id', $transaction) ? (int)$transaction['destination_id'] : null;
$destinationName = array_key_exists('destination_name', $transaction) ? (string)$transaction['destination_name'] : null;
$destinationIban = array_key_exists('destination_iban', $transaction) ? (string)$transaction['destination_iban'] : null;
$destinationNumber = array_key_exists('destination_number', $transaction) ? (string)$transaction['destination_number'] : null;
$array = [
'id' => $destinationId,
'name' => $destinationName,
'iban' => $destinationIban,
'number' => $destinationNumber,
];
$validDestination = $accountValidator->validateDestination($array);
// do something with result:
if (false === $validDestination) {
$validator->errors()->add(sprintf('transactions.%d.destination_id', $index), $accountValidator->destError);
@ -204,7 +218,8 @@ trait TransactionValidation
}
$destinationId = (int)($transaction['destination_id'] ?? 0);
$destinationName = $transaction['destination_name'] ?? null;
$validDestination = $accountValidator->validateDestination($destinationId, $destinationName, null);
$array = ['id' => $destinationId, 'name' => $destinationName,];
$validDestination = $accountValidator->validateDestination($array);
// do something with result:
if (false === $validDestination) {
Log::warning('Looks like the destination account is not valid so complain to the user about it.');

View File

@ -2,6 +2,15 @@
All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/).
## 5.6.7 - 2021-12-19
### Changed
- Rewrote part of the transaction engine to improve account search.
### Fixed
- Rule engine could not deal with dates in some edge cases, thanks @daften for the inspiration!
- Several annoying layout v2 issues fixed.
## 5.6.6 - 2021-12-10
### Fixed

42
composer.lock generated
View File

@ -1847,16 +1847,16 @@
},
{
"name": "laravel/framework",
"version": "v8.75.0",
"version": "v8.76.2",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
"reference": "0bb91d3176357da232da69762a64b0e0a0988637"
"reference": "c67acfdc968f487b6235435080eef62a7e2ed055"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/0bb91d3176357da232da69762a64b0e0a0988637",
"reference": "0bb91d3176357da232da69762a64b0e0a0988637",
"url": "https://api.github.com/repos/laravel/framework/zipball/c67acfdc968f487b6235435080eef62a7e2ed055",
"reference": "c67acfdc968f487b6235435080eef62a7e2ed055",
"shasum": ""
},
"require": {
@ -2015,7 +2015,7 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
"time": "2021-12-07T14:55:46+00:00"
"time": "2021-12-15T14:02:14+00:00"
},
{
"name": "laravel/passport",
@ -7386,16 +7386,16 @@
},
{
"name": "vlucas/phpdotenv",
"version": "v5.4.0",
"version": "v5.4.1",
"source": {
"type": "git",
"url": "https://github.com/vlucas/phpdotenv.git",
"reference": "d4394d044ed69a8f244f3445bcedf8a0d7fe2403"
"reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/d4394d044ed69a8f244f3445bcedf8a0d7fe2403",
"reference": "d4394d044ed69a8f244f3445bcedf8a0d7fe2403",
"url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/264dce589e7ce37a7ba99cb901eed8249fbec92f",
"reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f",
"shasum": ""
},
"require": {
@ -7433,11 +7433,13 @@
"authors": [
{
"name": "Graham Campbell",
"email": "hello@gjcampbell.co.uk"
"email": "hello@gjcampbell.co.uk",
"homepage": "https://github.com/GrahamCampbell"
},
{
"name": "Vance Lucas",
"email": "vance@vancelucas.com"
"email": "vance@vancelucas.com",
"homepage": "https://github.com/vlucas"
}
],
"description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
@ -7448,7 +7450,7 @@
],
"support": {
"issues": "https://github.com/vlucas/phpdotenv/issues",
"source": "https://github.com/vlucas/phpdotenv/tree/v5.4.0"
"source": "https://github.com/vlucas/phpdotenv/tree/v5.4.1"
},
"funding": [
{
@ -7460,7 +7462,7 @@
"type": "tidelift"
}
],
"time": "2021-11-10T01:08:39+00:00"
"time": "2021-12-12T23:22:04+00:00"
},
{
"name": "voku/portable-ascii",
@ -7598,16 +7600,16 @@
"packages-dev": [
{
"name": "barryvdh/laravel-debugbar",
"version": "v3.6.4",
"version": "v3.6.5",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/laravel-debugbar.git",
"reference": "3c2d678269ba60e178bcd93e36f6a91c36b727f1"
"reference": "ccf109f8755dcc7e58779d1aeb1051b04e0b4bef"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/3c2d678269ba60e178bcd93e36f6a91c36b727f1",
"reference": "3c2d678269ba60e178bcd93e36f6a91c36b727f1",
"url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/ccf109f8755dcc7e58779d1aeb1051b04e0b4bef",
"reference": "ccf109f8755dcc7e58779d1aeb1051b04e0b4bef",
"shasum": ""
},
"require": {
@ -7635,7 +7637,7 @@
"Barryvdh\\Debugbar\\ServiceProvider"
],
"aliases": {
"Debugbar": "Barryvdh\\Debugbar\\Facade"
"Debugbar": "Barryvdh\\Debugbar\\Facades\\Debugbar"
}
}
},
@ -7667,7 +7669,7 @@
],
"support": {
"issues": "https://github.com/barryvdh/laravel-debugbar/issues",
"source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.6.4"
"source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.6.5"
},
"funding": [
{
@ -7679,7 +7681,7 @@
"type": "github"
}
],
"time": "2021-10-21T10:57:31+00:00"
"time": "2021-12-14T14:45:18+00:00"
},
{
"name": "barryvdh/laravel-ide-helper",

View File

@ -101,7 +101,7 @@ return [
'webhooks' => true,
'handle_debts' => true,
],
'version' => '5.6.6',
'version' => '5.6.7',
'api_version' => '1.5.5',
'db_version' => 18,

View File

@ -15,9 +15,9 @@
"laravel-mix": "^6",
"lodash": "^4.17.21",
"lodash.clonedeep": "^4.5.0",
"postcss": "^8.4.4",
"postcss": "^8.4.5",
"resolve-url-loader": "^4.0.0",
"sass": "^1.44.0",
"sass": "^1.45.0",
"sass-loader": "^12.2.0",
"vue-i18n": "^8.26.7",
"vue-loader": "^15",

View File

@ -22,37 +22,13 @@
<div>
<div class="row">
<div class="col-lg-12 col-md-6 col-sm-12 col-xs-12">
<!-- Custom Tabs -->
<!--
<div class="card">
<div class="card-header d-flex p-0">
<h3 class="card-title p-3">Tabs</h3>
<ul class="nav nav-pills ml-auto p-2">
<li class="nav-item"><a class="nav-link active" href="#main_chart" data-toggle="tab">Chart</a></li>
<li class="nav-item"><a class="nav-link" href="#budgets" data-toggle="tab">Budgets</a></li>
<li class="nav-item"><a class="nav-link" href="#categories" data-toggle="tab">Categories</a></li>
</ul>
</div>
<div class="card-body">
<div class="tab-content">
<div class="tab-pane active" id="main_chart">
1: main chart
</div>
<div class="tab-pane" id="budgets">
2: tree map from/to budget
</div>
<div class="tab-pane" id="categories">
2: tree map from/to cat
</div>
</div>
</div>
</div>
-->
<!-- Custom Tabs will be put here (see file history). -->
</div>
</div>
<TransactionListLarge
:entries="rawTransactions"
:isEmpty="isEmpty"
:page="currentPage"
ref="list"
:total="total"
@ -105,7 +81,8 @@ export default {
perPage: 51,
locale: 'en-US',
api: null,
nameLoading: false
nameLoading: false,
isEmpty: false
}
},
created() {
@ -162,7 +139,10 @@ export default {
.then(response => {
// console.log('Now getTransactions() DONE!');
this.total = parseInt(response.data.meta.pagination.total);
let transactions = response.data.data;
if (0 === this.total) {
this.isEmpty = true;
}
// let transactions = response.data.data;
// console.log('Have downloaded ' + transactions.length + ' transactions');
// console.log(response.data);
this.rawTransactions = response.data.data;

View File

@ -332,6 +332,3 @@ export default {
}
</script>
<style scoped>
</style>

View File

@ -219,7 +219,7 @@ export default {
// remove budget info from rawBudgets if it's there:
this.filterBudgets(budgetId, currencyId);
let name = this.budgets[current.attributes.budget_id].name;
// let name = this.budgets[current.attributes.budget_id].name;
// spent within budget:
if (0.0 !== spentFloat && spentFloatPos < amount) {
// console.log('Spent ' + name + ' in budget');

View File

@ -448,7 +448,7 @@ export default {
this.updateField(payload);
if('description' === payload.field) {
// jump to account
this.$refs.splitForms[payload.index].$refs.sourceAccount.giveFocus();
//this.$refs.splitForms[payload.index].$refs.sourceAccount.giveFocus();
}
},
storeDate: function (payload) {

View File

@ -239,7 +239,7 @@ export default {
submittedAttachments: function () {
this.finaliseSubmission();
},
transactionType: function() {
transactionType: function () {
this.getExpectedSourceTypes();
}
},
@ -320,9 +320,11 @@ export default {
result.source_account_name = array.source_name;
result.source_account_type = array.source_type;
result.destination_account_id = array.destination_id;
result.destination_account_name = array.destination_name;
result.destination_account_type = array.destination_type;
if (array.destination_type !== 'Cash account') {
result.destination_account_id = array.destination_id;
result.destination_account_name = array.destination_name;
result.destination_account_type = array.destination_type;
}
// amount:
result.amount = array.amount;

View File

@ -20,24 +20,7 @@
<template>
<div>
<!--
<div class="row">
<div class="col">
<div class="card">
<div class="card-body">
Treemap categories
</div>
</div>
</div>
<div class="col">
<div class="card">
<div class="card-body">
Treemap accounts
</div>
</div>
</div>
</div>
-->
<!-- charts here (see file history) -->
<!-- page is ignored for the time being -->
<TransactionListLarge
:entries="rawTransactions"
@ -48,21 +31,6 @@
v-on:jump-page="jumpToPage($event)"
v-on:refreshed-cache-key="refreshedKey"
/>
<!--
<div class="row">
<div class="col-xl-2 col-lg-4 col-sm-6 col-xs-12" v-for="range in ranges">
<div class="card">
<div class="card-header">
<h3 class="card-title">{{ formatDate(range.start, 'yyyy-LL') }}</h3>
</div>
<div class="card-body">
<a :href="'./transactions/' + type + '/' + formatDate(range.start,'yyyy-LL-dd') + '/' + formatDate(range.end, 'yyyy-LL-dd')">Transactions</a>
</div>
</div>
</div>
</div>
-->
</div>
</template>

View File

@ -385,13 +385,13 @@ export default {
this.$emit('remove-transaction', {index: this.index});
},
triggerNextAccount: function(e) {
triggerNextAccount: function (e) {
//alert(e);
if('source' === e) {
if ('source' === e) {
// console.log('Jump to destination!');
this.$refs.destinationAccount.giveFocus();
}
}
},
},
computed: {
splitDate: function () {

View File

@ -20,8 +20,6 @@
<template>
<div>
<span>Length: {{ this.transactions.length }}</span>
<div v-if="transactions.length > 1" class="row">
<div class="col">
<!-- tabs -->

View File

@ -118,9 +118,7 @@ export default {
},
mounted: function () {
this.$nextTick(function () {
if (0 === this.index) {
this.$refs.inputThing.$refs.input.tabIndex = 2;
}
})
},
methods: {
@ -128,7 +126,7 @@ export default {
return './api/v1/autocomplete/accounts?types=' + types.join(',') + '&query=' + query;
},
giveFocus: function () {
//console.log('I want focus! now OK: ' + this.direction + ' l: ' + this.accounts.length);
// console.log('I want focus! now OK: ' + this.direction + ' l: ' + this.accounts.length);
//console.log(this.$refs.inputThing.$refs.input.value);
this.$refs.inputThing.$refs.input.focus();
//console.log(this.$refs.inputThing.isFocused);

View File

@ -71,9 +71,7 @@ export default {
},
mounted: function () {
this.$nextTick(function () {
if (0 === this.index) {
this.$refs.input.tabIndex = 3;
}
})
},
methods: {

View File

@ -69,12 +69,10 @@ export default {
this.timeStr = parts[1];
},
mounted: function () {
if (0 === this.index) {
this.$nextTick(function () {
this.$refs.date.tabIndex = 6;
this.$refs.time.tabIndex = 7;
});
}
this.$nextTick(function () {
this.$refs.date.tabIndex = 6;
this.$refs.time.tabIndex = 7;
});
},
data() {
return {

View File

@ -67,10 +67,7 @@ export default {
.then(response => {
this.descriptions = response.data;
this.initialSet = response.data;
if(0===this.index) {
this.$refs.autoComplete.$refs.input.tabIndex = 1;
}
this.$refs.autoComplete.$refs.input.tabIndex = 1;
});
},

View File

@ -169,10 +169,8 @@
</div>
<div class="card-footer"> (button)
<!--
<a :href="'./transactions/create/' + type" class="btn btn-success"
<a :href="'./transactions/create/TODO'" class="btn btn-success"
:title="$t('firefly.create_new_transaction')">{{ $t('firefly.create_new_transaction') }}</a>
-->
</div>
</div>
</div>
@ -227,6 +225,9 @@ export default {
entries: function (value) {
// console.log('detected new transactions! (' + value.length + ')');
this.parseTransactions();
if(this.isEmpty) {
this.loading=false;
}
},
// value: function (value) {
// // console.log('Watch value!');
@ -408,6 +409,10 @@ export default {
type: Boolean,
default: true
},
isEmpty: {
type: Boolean,
default: false
},
total: {
type: Number,
default: 1

View File

@ -47,7 +47,7 @@
"expense_accounts": "Ausgabekonten",
"go_to_expenses": "Ausgaben anzeigen",
"go_to_bills": "Rechnungen anzeigen",
"bills": "Vetr\u00e4ge",
"bills": "Vertr\u00e4ge",
"last_thirty_days": "Letzte 30 Tage",
"last_seven_days": "Letzte sieben Tage",
"go_to_piggies": "Sparschweine anzeigen",

View File

@ -38,21 +38,21 @@
"budget": "\u4e88\u7b97",
"category": "\u30ab\u30c6\u30b4\u30ea",
"opposing_account": "\u5bfe\u3059\u308b\u53e3\u5ea7",
"budgets": "\u307e\u3060\u4e88\u7b97\u3092\u304a\u6301\u3061\u3067\u306a\u3044\u3088\u3046\u3067\u3059\u3002<a href=\":link\">\u4e88\u7b97<\/a>\u30da\u30fc\u30b8\u304b\u3089\u3044\u304f\u3064\u304b\u751f\u6210\u3059\u308b\u3079\u304d\u3067\u3059\u3002\u4e88\u7b97\u306f\u652f\u51fa\u306e\u8ffd\u8de1\u3092\u7dad\u6301\u3059\u308b\u306e\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002",
"categories": "\u3042\u306a\u305f\u306e\u30ab\u30c6\u30b4\u30ea\u3078\u79fb\u52d5",
"go_to_budgets": "\u3042\u306a\u305f\u306e\u4e88\u7b97\u3078\u79fb\u52d5",
"budgets": "\u4e88\u7b97",
"categories": "\u30ab\u30c6\u30b4\u30ea",
"go_to_budgets": "\u4e88\u7b97\u3078\u79fb\u52d5",
"income": "\u53ce\u5165\u3001\u6240\u5f97\u3001\u5165\u91d1",
"go_to_deposits": "\u5165\u91d1\u3078\u79fb\u52d5",
"go_to_categories": "\u3042\u306a\u305f\u306e\u30ab\u30c6\u30b4\u30ea\u3078\u79fb\u52d5",
"go_to_categories": "\u30ab\u30c6\u30b4\u30ea\u3078\u79fb\u52d5",
"expense_accounts": "\u652f\u51fa\u5148\u3092\u898b\u308b",
"go_to_expenses": "\u652f\u51fa\u3078\u79fb\u52d5",
"go_to_bills": "\u3042\u306a\u305f\u306e\u8acb\u6c42\u3078\u79fb\u52d5",
"bills": "\u8acb\u6c42\u66f8",
"bills": "\u8acb\u6c42",
"last_thirty_days": "\u904e\u53bb30\u65e5\u9593",
"last_seven_days": "\u904e\u53bb7\u65e5\u9593",
"go_to_piggies": "\u8caf\u91d1\u7bb1\u3078\u79fb\u52d5",
"saved": "\u4fdd\u5b58\u3057\u307e\u3057\u305f\u3002",
"piggy_banks": "\u8caf\u91d1\u7bb1\u3078\u79fb\u52d5",
"piggy_banks": "\u8caf\u91d1\u7bb1",
"piggy_bank": "\u8caf\u91d1\u7bb1",
"amounts": "\u91d1\u984d",
"left": "\u6b8b\u308a",
@ -88,9 +88,9 @@
"transaction_updated_no_changes": "<a href=\"transactions\/show\/{ID}\">\u53d6\u5f15 #{ID}<\/a>\u300c{title}\u300d\u306f\u5909\u66f4\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002",
"transaction_updated_link": "<a href=\"transactions\/show\/{ID}\">\u53d6\u5f15 #{ID}\u300c{title}\u300d<\/a> \u304c\u66f4\u65b0\u3055\u308c\u307e\u3057\u305f\u3002",
"spent_x_of_y": "{amount} \/ {total} \u3092\u652f\u51fa\u3057\u307e\u3057\u305f",
"search": "\u691c\u7d22\u6761\u4ef6\u304c\u7a7a\u306a\u306e\u3067\u3001\u4f55\u3082\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002",
"search": "\u691c\u7d22",
"create_new_asset": "\u652f\u51fa\u30a2\u30ab\u30a6\u30f3\u30c8\uff08\u8cc7\u7523\u52d8\u5b9a\uff09",
"asset_accounts": "<strong>Firefly III<\/strong>\u3078\u3088\u3046\u3053\u305d\uff01\u3053\u306e\u30da\u30fc\u30b8\u3067\u306f\u3001\u3042\u306a\u305f\u306e\u53ce\u652f\u306b\u95a2\u3057\u3066\u306e\u57fa\u672c\u7684\u306a\u60c5\u5831\u304c\u5f97\u3089\u308c\u307e\u3059\u3002\u8a73\u3057\u304f\u306f\u3001&rarr;<a href=\":asset\">Asset Accounts<\/a>\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u78ba\u8a8d\u3001\u3042\u308b\u3044\u306f<a href=\":budgets\">\u4e88\u7b97<\/a>\u3084<a href=\":reports\">\u30ec\u30dd\u30fc\u30c8<\/a>\u30da\u30fc\u30b8\u3092\u898b\u3066\u304f\u3060\u3055\u3044\u3002\u6216\u3044\u306f\u3001\u6c17\u307e\u307e\u306b\u898b\u3066\u56de\u308b\u306e\u3082\u826f\u3044\u3067\u3057\u3087\u3046\u3002",
"asset_accounts": "\u8cc7\u7523\u52d8\u5b9a",
"reset_after": "\u9001\u4fe1\u5f8c\u306b\u30d5\u30a9\u30fc\u30e0\u3092\u30ea\u30bb\u30c3\u30c8",
"bill_paid_on": "{date} \u306b\u652f\u6255\u3044\u6e08\u307f",
"first_split_decides": "\u6700\u521d\u306e\u5206\u5272\u304c\u3053\u306e\u9805\u76ee\u306e\u5024\u3092\u6c7a\u5b9a\u3057\u307e\u3059\u3002",
@ -165,7 +165,7 @@
"extension_date_is": "\u5ef6\u9577\u65e5\u306f {date} \u3067\u3059",
"create_new_bill": "\u65b0\u3057\u3044\u8acb\u6c42\u66f8",
"store_new_bill": "\u65b0\u3057\u3044\u8acb\u6c42\u66f8",
"repeat_freq_yearly": "\u3053\u308c\u3089\u306e\u4f8b\u3092\u5fc5\u305a\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\uff1a<a href=\":one\">\u6bce\u6708\u306e\u8ca1\u52d9\u6982\u8981<\/a>\u3001<a href=\":two\">\u5e74\u6b21\u8ca1\u52d9\u6982\u8981<\/a>\u3001<a href=\":three\">\u4e88\u7b97\u6982\u8981<\/a>\u3002",
"repeat_freq_yearly": "\u6bce\u5e74",
"repeat_freq_half-year": "\u534a\u5e74\u3054\u3068",
"repeat_freq_quarterly": "\u56db\u534a\u671f\u3054\u3068",
"repeat_freq_monthly": "\u30af\u30ec\u30b8\u30c3\u30c8\u30ab\u30fc\u30c9\u306e\u5f15\u304d\u843d\u3068\u3057\u65e5",
@ -228,7 +228,7 @@
"active": "\u6709\u52b9",
"include_net_worth": "\u7d14\u8cc7\u7523\u306b\u542b\u3081\u308b",
"cc_type": "\u30af\u30ec\u30b8\u30c3\u30c8\u30ab\u30fc\u30c9\u306e\u6c7a\u6e08\u65b9\u6cd5",
"account_number": "\u30a2\u30ab\u30a6\u30f3\u30c8\u756a\u53f7",
"account_number": "\u53e3\u5ea7\u756a\u53f7",
"cc_monthly_payment_date": "\u30af\u30ec\u30b8\u30c3\u30c8\u30ab\u30fc\u30c9\u306e\u5f15\u304d\u843d\u3068\u3057\u65e5",
"virtual_balance": "\u4eee\u60f3\u6b8b\u9ad8",
"opening_balance": "\u671f\u9996\u6b8b\u9ad8",
@ -241,14 +241,14 @@
"account_role": "\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30ed\u30fc\u30eb",
"liability_direction": "\u50b5\u52d9\u306e\u51fa\u5165",
"book_date": "\u4e88\u7d04\u65e5",
"permDeleteWarning": "Firefly III \u304b\u3089\u306e\u524a\u9664\u306f\u6c38\u7d9a\u7684\u3067\u3042\u308a\u3001\u5143\u306b\u623b\u3059\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002",
"permDeleteWarning": "Firefly III\u304b\u3089\u306e\u524a\u9664\u306f\u6c38\u4e45\u7684\u3067\u3001\u5143\u306b\u623b\u3059\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002",
"account_areYouSure_js": "\u30a2\u30ab\u30a6\u30f3\u30c8\u300c{name}\u300d\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b\uff1f",
"also_delete_piggyBanks_js": "\u8caf\u91d1\u7bb1\u306f\u3042\u308a\u307e\u305b\u3093|\u3053\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306b\u95a2\u9023\u3059\u308b\u305f\u3060\u4e00\u3064\u306e\u8caf\u91d1\u7bb1\u3082\u524a\u9664\u3055\u308c\u307e\u3059\u3002|\u3053\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306b\u95a2\u9023\u3059\u308b {count} \u500b\u306e\u8caf\u91d1\u7bb1\u3082\u524a\u9664\u3055\u308c\u307e\u3059\u3002",
"also_delete_transactions_js": "\u53d6\u5f15\u306f\u3042\u308a\u307e\u305b\u3093|\u3053\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306b\u95a2\u9023\u3059\u308b\u305f\u3060\u4e00\u3064\u306e\u53d6\u5f15\u3082\u524a\u9664\u3055\u308c\u307e\u3059\u3002|\u3053\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306b\u95a2\u9023\u3059\u308b {count} \u4ef6\u306e\u53d6\u5f15\u3082\u524a\u9664\u3055\u308c\u307e\u3059\u3002",
"process_date": "\u51e6\u7406\u65e5",
"due_date": "\u65e5\u4ed8\u7bc4\u56f2",
"payment_date": "\u30af\u30ec\u30b8\u30c3\u30c8\u30ab\u30fc\u30c9\u306e\u5f15\u304d\u843d\u3068\u3057\u65e5",
"invoice_date": "\u65e5\u4ed8\u3092\u9078\u629e...",
"due_date": "\u3000\u671f\u65e5",
"payment_date": "\u5f15\u304d\u843d\u3068\u3057\u65e5",
"invoice_date": "\u9818\u53ce\u66f8\u767a\u884c\u65e5",
"amount_min": "\u6700\u4f4e\u984d",
"amount_max": "\u4e0a\u9650\u984d",
"start_date": "\u671f\u9593\u306e\u958b\u59cb",

File diff suppressed because it is too large Load Diff

View File

@ -10,7 +10,7 @@
},
"devDependencies": {
"@johmun/vue-tags-input": "^2",
"@vue/compiler-sfc": "^3.2.23",
"@vue/compiler-sfc": "^3.2.26",
"axios": "^0.24",
"bootstrap-sass": "^3",
"cross-env": "^7.0",

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -91,10 +91,10 @@
"interest_date": "\u5229\u606f",
"book_date": "\u4e88\u7d04\u65e5",
"process_date": "\u51e6\u7406\u65e5",
"due_date": "\u65e5\u4ed8\u7bc4\u56f2",
"due_date": "\u3000\u671f\u65e5",
"foreign_amount": "\u5916\u8ca8\u91cf",
"payment_date": "\u30af\u30ec\u30b8\u30c3\u30c8\u30ab\u30fc\u30c9\u306e\u5f15\u304d\u843d\u3068\u3057\u65e5",
"invoice_date": "\u65e5\u4ed8\u3092\u9078\u629e...",
"payment_date": "\u5f15\u304d\u843d\u3068\u3057\u65e5",
"invoice_date": "\u9818\u53ce\u66f8\u767a\u884c\u65e5",
"internal_reference": "\u5185\u90e8\u53c2\u7167"
},
"config": {

View File

@ -342,6 +342,15 @@ return [
'search_modifier_bill_is' => 'Сметката е ":value"',
'search_modifier_transaction_type' => 'Видът на транзакцията е ":value"',
'search_modifier_tag_is' => 'Етикетът е ":value"',
'search_modifier_date_is_year' => 'Transaction is in year ":value"',
'search_modifier_date_is_month' => 'Transaction is in month ":value"',
'search_modifier_date_is_day' => 'Transaction is on day of month ":value"',
'search_modifier_date_before_year' => 'Transaction is before or in year ":value"',
'search_modifier_date_before_month' => 'Transaction is before or in month ":value"',
'search_modifier_date_before_day' => 'Transaction before or on day of month ":value"',
'search_modifier_date_after_year' => 'Transaction is in or after year ":value"',
'search_modifier_date_after_month' => 'Transaction is in or after month ":value"',
'search_modifier_date_after_day' => 'Transaction is after or on day of month ":value"',
'update_rule_from_query' => 'Обновяване на правило ":rule" от низа за търсене',
'create_rule_from_query' => 'Създай ново правило от низа за търсене',
'rule_from_search_words' => 'Механизмът за правила има затруднения с обработката на ":string". Предложеното правило, което отговаря на низа ви за търсене, може да даде различни резултати. Моля проверете внимателно задействанията на правилото.',

View File

@ -342,6 +342,15 @@ return [
'search_modifier_bill_is' => 'Bill is ":value"',
'search_modifier_transaction_type' => 'Transaction type is ":value"',
'search_modifier_tag_is' => 'Tag is ":value"',
'search_modifier_date_is_year' => 'Transaction is in year ":value"',
'search_modifier_date_is_month' => 'Transaction is in month ":value"',
'search_modifier_date_is_day' => 'Transaction is on day of month ":value"',
'search_modifier_date_before_year' => 'Transaction is before or in year ":value"',
'search_modifier_date_before_month' => 'Transaction is before or in month ":value"',
'search_modifier_date_before_day' => 'Transaction before or on day of month ":value"',
'search_modifier_date_after_year' => 'Transaction is in or after year ":value"',
'search_modifier_date_after_month' => 'Transaction is in or after month ":value"',
'search_modifier_date_after_day' => 'Transaction is after or on day of month ":value"',
'update_rule_from_query' => 'Update rule ":rule" from search query',
'create_rule_from_query' => 'Create new rule from search query',
'rule_from_search_words' => 'The rule engine has a hard time handling ":string". The suggested rule that fits your search query may give different results. Please verify the rule triggers carefully.',

View File

@ -342,6 +342,15 @@ return [
'search_modifier_bill_is' => 'Rechnung ist „:value”',
'search_modifier_transaction_type' => 'Buchungstyp ist „:value”',
'search_modifier_tag_is' => 'Schlagwort ist „:value”',
'search_modifier_date_is_year' => 'Transaction is in year ":value"',
'search_modifier_date_is_month' => 'Transaction is in month ":value"',
'search_modifier_date_is_day' => 'Transaction is on day of month ":value"',
'search_modifier_date_before_year' => 'Transaction is before or in year ":value"',
'search_modifier_date_before_month' => 'Transaction is before or in month ":value"',
'search_modifier_date_before_day' => 'Transaction before or on day of month ":value"',
'search_modifier_date_after_year' => 'Transaction is in or after year ":value"',
'search_modifier_date_after_month' => 'Transaction is in or after month ":value"',
'search_modifier_date_after_day' => 'Transaction is after or on day of month ":value"',
'update_rule_from_query' => 'Regel „:rule” aus Suchanfrage aktualisieren',
'create_rule_from_query' => 'Neue Regel aus Suchanfrage erstellen',
'rule_from_search_words' => 'Die Regel-Modul hat Schwierigkeiten „:string” zu verarbeiten. Die vorgeschlagene Regel, die Ihrer Suchanfrage entspricht, kann zu unterschiedlichen Ergebnissen führen. Bitte überprüfen Sie die Regelauslöser sorgfältig.',
@ -1370,7 +1379,7 @@ return [
'piggyBanks' => 'Sparschweine',
'piggy_banks' => 'Sparschweine',
'amount_x_of_y' => '{current} von {total}',
'bills' => 'Veträge',
'bills' => 'Verträge',
'withdrawal' => 'Ausgabe',
'opening_balance' => 'Eröffnungsbilanz',
'deposit' => 'Einnahme',
@ -1774,7 +1783,7 @@ return [
'no_piggies_imperative_default' => 'Haben Sie Dinge, auf die Sie sparen? Erstellen Sie eine Sparschwein und behalten Sie den Überblick:',
'no_piggies_create_default' => 'Ein neues Sparschwein erstellen',
'no_bills_title_default' => 'Lassen Sie uns nun eine Rechnung erstellen!',
'no_bills_intro_default' => 'Du hast noch keine Veträge. Sie können Verträge erstellen, um die laufenden Ausgaben, wie zum Beispiel Ihre Versicherung oder Miete, nachzuverfolgen.',
'no_bills_intro_default' => 'Du hast noch keine Verträge. Sie können Verträge erstellen, um die laufenden Ausgaben, wie zum Beispiel Ihre Versicherung oder Miete, nachzuverfolgen.',
'no_bills_imperative_default' => 'Haben Sie regelmäßige Verträge? Erstellen Sie einen Vertrag und verfolgen Sie Ihre Zahlungen:',
'no_bills_create_default' => 'Eine Rechnung erstellen',

View File

@ -342,6 +342,15 @@ return [
'search_modifier_bill_is' => 'Το πάγιο έξοδο είναι ":value"',
'search_modifier_transaction_type' => 'Ο τύπος συναλλαγής είναι ":value"',
'search_modifier_tag_is' => 'Η ετικέτα είναι ":value"',
'search_modifier_date_is_year' => 'Transaction is in year ":value"',
'search_modifier_date_is_month' => 'Transaction is in month ":value"',
'search_modifier_date_is_day' => 'Transaction is on day of month ":value"',
'search_modifier_date_before_year' => 'Transaction is before or in year ":value"',
'search_modifier_date_before_month' => 'Transaction is before or in month ":value"',
'search_modifier_date_before_day' => 'Transaction before or on day of month ":value"',
'search_modifier_date_after_year' => 'Transaction is in or after year ":value"',
'search_modifier_date_after_month' => 'Transaction is in or after month ":value"',
'search_modifier_date_after_day' => 'Transaction is after or on day of month ":value"',
'update_rule_from_query' => 'Ενημέρωση κανόνα ":rule" από το ερώτημα αναζήτησης',
'create_rule_from_query' => 'Δημιουργία νέου κανόνα από το ερώτημα αναζήτησης',
'rule_from_search_words' => 'Η ρουτίνα για τους κανόνες δυσκολεύτηκε στο χειρισμό του ":string". Ο προτεινόμενος κανόνας που ταιριάζει στο ερώτημά αναζήτησης μπορεί να δώσει διαφορετικά αποτελέσματα. Παρακαλώ να επιβεβαιώσετε προσεκτικά τους κανόνες ενεργοποίησης.',

View File

@ -342,6 +342,15 @@ return [
'search_modifier_bill_is' => 'Bill is ":value"',
'search_modifier_transaction_type' => 'Transaction type is ":value"',
'search_modifier_tag_is' => 'Tag is ":value"',
'search_modifier_date_is_year' => 'Transaction is in year ":value"',
'search_modifier_date_is_month' => 'Transaction is in month ":value"',
'search_modifier_date_is_day' => 'Transaction is on day of month ":value"',
'search_modifier_date_before_year' => 'Transaction is before or in year ":value"',
'search_modifier_date_before_month' => 'Transaction is before or in month ":value"',
'search_modifier_date_before_day' => 'Transaction before or on day of month ":value"',
'search_modifier_date_after_year' => 'Transaction is in or after year ":value"',
'search_modifier_date_after_month' => 'Transaction is in or after month ":value"',
'search_modifier_date_after_day' => 'Transaction is after or on day of month ":value"',
'update_rule_from_query' => 'Update rule ":rule" from search query',
'create_rule_from_query' => 'Create new rule from search query',
'rule_from_search_words' => 'The rule engine has a hard time handling ":string". The suggested rule that fits your search query may give different results. Please verify the rule triggers carefully.',

View File

@ -342,6 +342,15 @@ return [
'search_modifier_bill_is' => 'Bill is ":value"',
'search_modifier_transaction_type' => 'Transaction type is ":value"',
'search_modifier_tag_is' => 'Tag is ":value"',
'search_modifier_date_is_year' => 'Transaction is in year ":value"',
'search_modifier_date_is_month' => 'Transaction is in month ":value"',
'search_modifier_date_is_day' => 'Transaction is on day of month ":value"',
'search_modifier_date_before_year' => 'Transaction is before or in year ":value"',
'search_modifier_date_before_month' => 'Transaction is before or in month ":value"',
'search_modifier_date_before_day' => 'Transaction before or on day of month ":value"',
'search_modifier_date_after_year' => 'Transaction is in or after year ":value"',
'search_modifier_date_after_month' => 'Transaction is in or after month ":value"',
'search_modifier_date_after_day' => 'Transaction is after or on day of month ":value"',
'update_rule_from_query' => 'Update rule ":rule" from search query',
'create_rule_from_query' => 'Create new rule from search query',
'rule_from_search_words' => 'The rule engine has a hard time handling ":string". The suggested rule that fits your search query may give different results. Please verify the rule triggers carefully.',

View File

@ -342,6 +342,15 @@ return [
'search_modifier_bill_is' => 'La factura es ":value"',
'search_modifier_transaction_type' => 'El tipo de transacción es ":value"',
'search_modifier_tag_is' => 'La etiqueta es ":value"',
'search_modifier_date_is_year' => 'El año de la transacción es ":value"',
'search_modifier_date_is_month' => 'El mes de la transacción es ":value"',
'search_modifier_date_is_day' => 'El día de la transacción es ":value"',
'search_modifier_date_before_year' => 'El año de la transacción es anterior o igual a ":value"',
'search_modifier_date_before_month' => 'El mes de la transacción es anterior o igual a ":value"',
'search_modifier_date_before_day' => 'El día de la transacción es anterior o igual a ":value"',
'search_modifier_date_after_year' => 'El año de la transacción es posterior o igual a ":value"',
'search_modifier_date_after_month' => 'El mes de la transacción es posterior o igual a ":value"',
'search_modifier_date_after_day' => 'El día de la transacción es posterior o igual a ":value"',
'update_rule_from_query' => 'Actualizar regla ":rule" de la consulta de búsqueda',
'create_rule_from_query' => 'Crear nueva regla a partir de la consulta de búsqueda',
'rule_from_search_words' => 'El motor de reglas tiene un manejo difícil ":string". La regla sugerida que se ajusta a su consulta de búsqueda puede dar diferentes resultados. Por favor verifique los activadores de la regla cuidadosamente.',

View File

@ -342,6 +342,15 @@ return [
'search_modifier_bill_is' => 'Bill is ":value"',
'search_modifier_transaction_type' => 'Transaction type is ":value"',
'search_modifier_tag_is' => 'Tag is ":value"',
'search_modifier_date_is_year' => 'Transaction is in year ":value"',
'search_modifier_date_is_month' => 'Transaction is in month ":value"',
'search_modifier_date_is_day' => 'Transaction is on day of month ":value"',
'search_modifier_date_before_year' => 'Transaction is before or in year ":value"',
'search_modifier_date_before_month' => 'Transaction is before or in month ":value"',
'search_modifier_date_before_day' => 'Transaction before or on day of month ":value"',
'search_modifier_date_after_year' => 'Transaction is in or after year ":value"',
'search_modifier_date_after_month' => 'Transaction is in or after month ":value"',
'search_modifier_date_after_day' => 'Transaction is after or on day of month ":value"',
'update_rule_from_query' => 'Update rule ":rule" from search query',
'create_rule_from_query' => 'Create new rule from search query',
'rule_from_search_words' => 'The rule engine has a hard time handling ":string". The suggested rule that fits your search query may give different results. Please verify the rule triggers carefully.',

View File

@ -342,6 +342,15 @@ return [
'search_modifier_bill_is' => 'La facture est ":value"',
'search_modifier_transaction_type' => 'Le type de transaction est ":value"',
'search_modifier_tag_is' => 'Le tag est ":value"',
'search_modifier_date_is_year' => 'L\'opération est dans l\'année ":value"',
'search_modifier_date_is_month' => 'L\'opération est dans le mois ":value"',
'search_modifier_date_is_day' => 'L\'opération est le jour du mois ":value"',
'search_modifier_date_before_year' => 'L\'opération est avant ou dans l\'année ":value"',
'search_modifier_date_before_month' => 'L\'opération est avant ou dans le mois ":value"',
'search_modifier_date_before_day' => 'L\'opération est avant ou le jour du mois ":value"',
'search_modifier_date_after_year' => 'L\'opération est dans ou après l\'année ":value"',
'search_modifier_date_after_month' => 'L\'opération est dans ou après le mois ":value"',
'search_modifier_date_after_day' => 'L\'opération est après ou le jour du mois ":value"',
'update_rule_from_query' => 'Mettre à jour la règle ":rule" à partir de la requête de recherche',
'create_rule_from_query' => 'Créer une nouvelle règle à partir de la requête de recherche',
'rule_from_search_words' => 'Le moteur de règles a du mal à gérer ":string". La règle suggérée qui correspond à votre requête de recherche peut donner des résultats différents. Veuillez vérifier que la règle se déclenche correctement.',

View File

@ -342,6 +342,15 @@ return [
'search_modifier_bill_is' => 'A számla ":value"',
'search_modifier_transaction_type' => 'Tranzakció típusa: :value',
'search_modifier_tag_is' => 'A címke ":value"',
'search_modifier_date_is_year' => 'Transaction is in year ":value"',
'search_modifier_date_is_month' => 'Transaction is in month ":value"',
'search_modifier_date_is_day' => 'Transaction is on day of month ":value"',
'search_modifier_date_before_year' => 'Transaction is before or in year ":value"',
'search_modifier_date_before_month' => 'Transaction is before or in month ":value"',
'search_modifier_date_before_day' => 'Transaction before or on day of month ":value"',
'search_modifier_date_after_year' => 'Transaction is in or after year ":value"',
'search_modifier_date_after_month' => 'Transaction is in or after month ":value"',
'search_modifier_date_after_day' => 'Transaction is after or on day of month ":value"',
'update_rule_from_query' => '":rule" szabály frissítése a keresési feltételek alapján',
'create_rule_from_query' => 'Új szabály létrehozása a keresési feltételek alapján',
'rule_from_search_words' => 'The rule engine has a hard time handling ":string". The suggested rule that fits your search query may give different results. Please verify the rule triggers carefully.',

View File

@ -342,6 +342,15 @@ return [
'search_modifier_bill_is' => 'Tagihan adalah ":value"',
'search_modifier_transaction_type' => 'Tipe transaksi adalah ":value"',
'search_modifier_tag_is' => 'Tag is ":value"',
'search_modifier_date_is_year' => 'Transaction is in year ":value"',
'search_modifier_date_is_month' => 'Transaction is in month ":value"',
'search_modifier_date_is_day' => 'Transaction is on day of month ":value"',
'search_modifier_date_before_year' => 'Transaction is before or in year ":value"',
'search_modifier_date_before_month' => 'Transaction is before or in month ":value"',
'search_modifier_date_before_day' => 'Transaction before or on day of month ":value"',
'search_modifier_date_after_year' => 'Transaction is in or after year ":value"',
'search_modifier_date_after_month' => 'Transaction is in or after month ":value"',
'search_modifier_date_after_day' => 'Transaction is after or on day of month ":value"',
'update_rule_from_query' => 'Update rule ":rule" from search query',
'create_rule_from_query' => 'Create new rule from search query',
'rule_from_search_words' => 'The rule engine has a hard time handling ":string". The suggested rule that fits your search query may give different results. Please verify the rule triggers carefully.',

View File

@ -342,6 +342,15 @@ return [
'search_modifier_bill_is' => 'La bolletta è ":value"',
'search_modifier_transaction_type' => 'Il tipo di transazione è ":value"',
'search_modifier_tag_is' => 'L\'etichetta è ":value"',
'search_modifier_date_is_year' => 'La transazione è dell\'anno ":value"',
'search_modifier_date_is_month' => 'La transazione è del mese di ":value"',
'search_modifier_date_is_day' => 'La transazione è del giorno ":value"',
'search_modifier_date_before_year' => 'La transazione è precedente all\'anno o dell\'anno ":value"',
'search_modifier_date_before_month' => 'La transazione è precedente o è del mese di ":value"',
'search_modifier_date_before_day' => 'La transazione è precedente o è del giorno ":value"',
'search_modifier_date_after_year' => 'La transazione è successiva all\'anno o dell\'anno ":value"',
'search_modifier_date_after_month' => 'La transazione è successiva o è del mese di ":value"',
'search_modifier_date_after_day' => 'La transazione è successiva o è del giorno ":value"',
'update_rule_from_query' => 'Aggiorna la regola ":rule" dalla ricerca',
'create_rule_from_query' => 'Crea nuova regola dalla ricerca',
'rule_from_search_words' => 'Il motore delle regole ha difficoltà a gestire ":string". La regola suggerita che si adatta alla tua ricerca potrebbe dare risultati diversi. Verifica attentamente che la regola funzioni.',

View File

@ -23,6 +23,6 @@
declare(strict_types=1);
return [
'failed' => '認証データが登録情報と一致しません。',
'throttle' => 'ログインの失敗が既定回数に達しました。:seconds 秒以上空けて、再度お試しください。',
'failed' => '資格情報が一致しません。',
'throttle' => 'ログインの試行回数が多すぎます。:seconds 秒後にお試しください。',
];

View File

@ -26,8 +26,8 @@ return [
'home' => 'ホーム',
'edit_currency' => '通貨 ":name" を編集する',
'delete_currency' => '通貨 ":name" を削除する',
'newPiggyBank' => '新しい貯金箱を作成する',
'edit_piggyBank' => '貯金箱 ":name" を編集する',
'newPiggyBank' => '貯金箱の新規作成',
'edit_piggyBank' => '貯金箱「:name」を編集',
'preferences' => '設定',
'profile' => 'プロフィール',
'accounts' => '口座',
@ -60,5 +60,5 @@ return [
'delete_journal_link' => '取引間のリンクを削除する',
'edit_object_group' => 'グループ「:title」を編集',
'delete_object_group' => 'グループ「:title」を削除',
'logout_others' => '他のセッションをログアウトさせる'
'logout_others' => '他のセッションからログアウトする'
];

View File

@ -61,10 +61,10 @@ return [
'new_transaction' => '新しい取引',
'no_rules_for_bill' => 'この請求書はどのルールにも関連付けられていません。',
'go_to_asset_accounts' => '資産勘定を見る',
'go_to_budgets' => 'あなたの予算へ移動',
'go_to_budgets' => '予算へ移動',
'go_to_withdrawals' => '出金に移動',
'clones_journal_x' => '取り引き ":description" を削除する',
'go_to_categories' => 'あなたのカテゴリへ移動',
'go_to_categories' => 'カテゴリへ移動',
'go_to_bills' => 'あなたの請求へ移動',
'go_to_expense_accounts' => '支出先を見る',
'go_to_revenue_accounts' => '収入源を見る',
@ -189,7 +189,7 @@ return [
'exchange_rate_instructions' => '資産口座「@name」は @native_currency での取引のみ受け付けます。@foreign_currency を使う場合は、@native_currency での金額も同様に確認してください。',
'transfer_exchange_rate_instructions' => '出金元資産口座「@source_name」は @source_currency の取引のみ受け付けます。 送金先資産口座「@dest_name」は @dest_currency でのみ取引を受け付けます。両方の通貨で正しく送金額を入力する必要があります。',
'transaction_data' => '取引データ',
'invalid_server_configuration' => 'サーバーの外部IPアドレス',
'invalid_server_configuration' => '無効なサーバー構成',
'invalid_locale_settings' => 'Firefly III に必要なパッケージが不足しているため、金額を整形できません。 これを行う<a href="https://github.com/firefly-iii/help/wiki/Missing-locale-packages">説明はここ</a>にあります。',
'quickswitch' => 'クイックスイッチ',
'sign_in_to_start' => 'サインインしてセッションを開始',
@ -278,7 +278,7 @@ return [
'update_channel_alpha' => 'アルファです。私たちは何でも投入し、使います。',
// search
'search' => '検索条件が空なので、何も見つかりませんでした。',
'search' => '検索',
'search_query' => '":query" の検索結果',
'search_found_transactions' => 'Firefly III は :count 件の取引を :time 秒で見つけました。|Firefly III は :count 件の取引を :time 秒で見つけました。',
'search_found_more_transactions' => 'Firefly III は :count 件以上の取引を :time 秒で見つけました。',
@ -342,6 +342,15 @@ return [
'search_modifier_bill_is' => '請求名が「:value」',
'search_modifier_transaction_type' => '取引種別が「:value」',
'search_modifier_tag_is' => 'タグ名が「:value」',
'search_modifier_date_is_year' => ':value年の取引',
'search_modifier_date_is_month' => ':value月の取引',
'search_modifier_date_is_day' => ':value月内日の取引',
'search_modifier_date_before_year' => ':value年以前または年内の取引',
'search_modifier_date_before_month' => ':value月以前または月内の取引',
'search_modifier_date_before_day' => 'Transaction before or on day of month ":value"',
'search_modifier_date_after_year' => 'Transaction is in or after year ":value"',
'search_modifier_date_after_month' => 'Transaction is in or after month ":value"',
'search_modifier_date_after_day' => 'Transaction is after or on day of month ":value"',
'update_rule_from_query' => '検索クエリからルール「:rule」を更新',
'create_rule_from_query' => '検索クエリから新しいルールを作成',
'rule_from_search_words' => 'ルールエンジンは「:string」をうまく扱えません。 検索クエリに提案されたルールは、異なる結果をもたらす可能性があります。ルールのトリガーは慎重に検証してください。',
@ -350,14 +359,14 @@ return [
// END
'modifiers_applies_are' => '次の修飾子も検索に適用されます:',
'general_search_error' => '検索中にエラーが発生しました。詳細はログファイルを確認してください。',
'search_box' => '検索条件が空なので、何も見つかりませんでした。',
'search_box' => '検索',
'search_box_intro' => 'Firefly III の検索へようこそ。テキストフィールドに検索クエリを入力します。 検索は高度であるため、ヘルプファイルを確認してください。',
'search_error' => 'エラー!',
'search_searching' => '検索中...',
'search_results' => '":query" の検索結果',
// repeat frequencies:
'repeat_freq_yearly' => 'これらの例を必ず確認してください:<a href=":one">月の財務概要</a>、<a href=":two">次財務概要</a>、<a href=":three">予算概要</a>。',
'repeat_freq_yearly' => '毎年',
'repeat_freq_half-year' => '半年ごと',
'repeat_freq_quarterly' => '四半期ごと',
'repeat_freq_monthly' => 'クレジットカードの引き落とし日',
@ -365,15 +374,15 @@ return [
'weekly' => '週毎',
'quarterly' => '四半期ごと',
'half-year' => '半年ごと',
'yearly' => 'これらの例を必ず確認してください:<a href=":one">月の財務概要</a>、<a href=":two">次財務概要</a>、<a href=":three">予算概要</a>。',
'yearly' => '毎年',
// rules
'cannot_fire_inactive_rules' => '無効なルールは実行できません。',
'rules' => 'この請求書はどのルールにも関連付けられていません。',
'rules' => 'ルール',
'rule_name' => '規則',
'rule_triggers' => '規則',
'rule_actions' => '規則',
'new_rule' => '規則',
'new_rule' => '新しいルール',
'new_rule_group' => '規則',
'rule_priority_up' => 'ルールの優先度を上げる',
'rule_priority_down' => 'ルールの優先度を下げる',
@ -415,8 +424,8 @@ return [
'action_value' => 'この数値は選択された操作には無効です。',
'stop_executing_other_actions' => '他のアクションの実行を停止する',
'add_rule_action' => '操作',
'edit_rule' => '規則',
'delete_rule' => '削除',
'edit_rule' => 'ルール ":title" を編集',
'delete_rule' => 'ルール ":title" を削除',
'update_rule' => '規則',
'test_rule_triggers' => '支出先を見る',
'warning_no_matching_transactions' => '一致する取引は見つかりませんでした。',
@ -432,7 +441,7 @@ return [
'applied_rule_group_selection' => 'ルールグループ「:title」が選択した取引に適用されました。',
// actions and triggers
'rule_trigger_user_action' => 'この数値は選択された操作には無効です。',
'rule_trigger_user_action' => 'ユーザーアクションは ":trigger_value"です。',
'rule_trigger_source_account_starts_choice' => '出金元口座名が...で始まる',
'rule_trigger_source_account_starts' => '出金元口座名が「:trigger_value」で始まる',
'rule_trigger_source_account_ends_choice' => '出金元口座名が次で終わる',
@ -481,20 +490,20 @@ return [
'rule_trigger_transaction_type' => 'この数値は選択されたトリガーには無効です。',
'rule_trigger_category_is_choice' => 'カテゴリ',
'rule_trigger_category_is' => 'この数値は選択されたトリガーには無効です。',
'rule_trigger_amount_less_choice' => ':amount 削除しました',
'rule_trigger_amount_less_choice' => '金額が次より小さい',
'rule_trigger_amount_less' => '金額が:trigger_valueより小さい',
'rule_trigger_amount_exactly_choice' => '数量',
'rule_trigger_amount_exactly' => 'この数値は選択されたトリガーには無効です。',
'rule_trigger_amount_exactly' => '金額が「:trigger_value」',
'rule_trigger_amount_more_choice' => '金額が次より大きい',
'rule_trigger_amount_more' => '金額が:trigger_valueより大きい',
'rule_trigger_description_starts_choice' => '説明',
'rule_trigger_description_starts' => 'この数値は選択されたトリガーには無効です。',
'rule_trigger_description_starts' => '説明が「:trigger_value」で始まる',
'rule_trigger_description_ends_choice' => '説明',
'rule_trigger_description_ends' => 'この数値は選択されたトリガーには無効です。',
'rule_trigger_description_ends' => '説明が「:trigger_value」で終わる',
'rule_trigger_description_contains_choice' => '説明',
'rule_trigger_description_contains' => 'この数値は選択されたトリガーには無効です。',
'rule_trigger_description_contains' => '説明が「:trigger_value」を含む',
'rule_trigger_description_is_choice' => '説明',
'rule_trigger_description_is' => 'この数値は選択されたトリガーには無効です。',
'rule_trigger_description_is' => '説明が「:trigger_value」',
'rule_trigger_date_is_choice' => '取引日が次と一致する',
'rule_trigger_date_is' => '取引日が「:trigger_value」と一致する',
'rule_trigger_date_before_choice' => '取引日が次より前',
@ -506,7 +515,7 @@ return [
'rule_trigger_updated_on_choice' => '取引の最終編集が次にされた',
'rule_trigger_updated_on' => '取引の最終編集が「:trigger_value」',
'rule_trigger_budget_is_choice' => '予算',
'rule_trigger_budget_is' => 'この数値は選択されたトリガーには無効です。',
'rule_trigger_budget_is' => '予算が「:trigger_value」',
'rule_trigger_tag_is_choice' => 'タグモード',
'rule_trigger_tag_is' => 'この数値は選択されたトリガーには無効です。',
'rule_trigger_currency_is_choice' => '取引',
@ -708,8 +717,8 @@ return [
'delete_stuff_header' => 'データを削除',
'permanent_delete_stuff' => 'これらのボタンには注意してください。削除すると元に戻せません。',
'other_sessions_logged_out' => 'すべてのセッションでログアウトしました。',
'delete_all_budgets' => 'あなたの予算へ移動',
'delete_all_categories' => 'あなたのカテゴリへ移動',
'delete_all_budgets' => 'すべての予算を削除する',
'delete_all_categories' => 'すべてのカテゴリを削除',
'delete_all_tags' => 'すべてのタグを削除する',
'delete_all_bills' => 'すべての請求を削除する',
'delete_all_piggy_banks' => 'すべての貯金箱を削除する',
@ -831,9 +840,9 @@ return [
// attachments
'nr_of_attachments' => ':count 通のエラーがあります',
'attachments' => '添付ファイル',
'edit_attachment' => '添付',
'edit_attachment' => '添付ファイル「:name」の編集',
'update_attachment' => '添付',
'delete_attachment' => '添付',
'delete_attachment' => '添付ファイル「:name」の削除',
'attachment_deleted' => '添付',
'liabilities_deleted' => '債務',
'attachment_updated' => '添付',
@ -896,7 +905,7 @@ return [
'create_new_liabilities' => '新しい責任を作成',
'create_new_expense' => '新しい支出先',
'create_new_revenue' => '新しい収入源',
'create_new_piggy_bank' => '新しいブタの貯金箱を作成する',
'create_new_piggy_bank' => '新しい貯金箱を作成する',
'create_new_bill' => '新しい請求書',
// currencies:
@ -934,7 +943,7 @@ return [
// forms:
'mandatoryFields' => '必須項目',
'optionalFields' => '任意項目',
'options' => 'あなたの追加設定はあとからやり直すことも出来ます。',
'options' => 'オプション',
// budgets:
'daily_budgets' => '毎日の予算',
@ -948,7 +957,7 @@ return [
'total_available_budget' => '利用可能な予算の合計 (:start から :end まで)',
'total_available_budget_in_currency' => ':currencyで利用可能な予算の合計',
'see_below' => '支出先を見る',
'create_new_budget' => '新しいブタの貯金箱を作成する',
'create_new_budget' => '新しい予算を作成する',
'store_new_budget' => '新しい取引を保存',
'stored_new_budget' => '":name"予算のすべての取引',
'available_between' => ':startから:endまでのすべての収入',
@ -967,7 +976,7 @@ return [
'deleted_bl' => '予算額が削除されました',
'alt_currency_ab_create' => '別の通貨で利用可能な予算を設定する',
'bl_create_btn' => 'このフィールドを使用して、通貨と金額を設定します。',
'inactiveBudgets' => 'あなたの予算へ移動',
'inactiveBudgets' => 'アクティブでない予算',
'without_budget_between' => ':tagタグのついた:startから:endまでのすべての取引',
'delete_budget' => '予算":name" を削除する',
'deleted_budget' => '":name"予算のすべての取引のチャート',
@ -1088,7 +1097,7 @@ return [
'make_new_expense_account' => '新しい支出先',
'make_new_revenue_account' => '新しい収入源',
'make_new_liabilities_account' => '新しい借金',
'asset_accounts' => '<strong>Firefly III</strong>へようこそ!このページでは、あなたの収支に関しての基本的な情報が得られます。詳しくは、&rarr;<a href=":asset">Asset Accounts</a>アカウントを確認、あるいは<a href=":budgets">予算</a>や<a href=":reports">レポート</a>ページを見てください。或いは、気ままに見て回るのも良いでしょう。',
'asset_accounts' => '資産勘定',
'asset_accounts_inactive' => '支出元',
'expense_accounts' => '支出先を見る',
'expense_accounts_inactive' => '支出先を見る',
@ -1177,7 +1186,7 @@ return [
'without_category' => 'カテゴリ',
'update_category' => 'チャンネルを更新',
'updated_category' => '":name"カテゴリのすべての取引',
'categories' => 'あなたのカテゴリへ移動',
'categories' => 'カテゴリ',
'edit_category' => '通貨 ":name" を編集する',
'no_category' => 'カテゴリ',
'category' => 'カテゴリ',
@ -1235,7 +1244,7 @@ return [
'account_per_category' => 'カテゴリ',
'create_new_object' => '作成',
'empty' => 'この自動補完ドロップダウン/テキストボックスで支払いを選択または入力します。現金入金を行う場合は空のままにします。',
'all_other_budgets' => 'あなたの予算へ移動',
'all_other_budgets' => '(その他の予算すべて)',
'all_other_accounts' => 'この欄のすべてのアカウントは一致している必要があります。',
'expense_per_source_account' => '支出アカウント(資産勘定)',
'expense_per_destination_account' => '支出先アカウント(支出元アカウント
@ -1289,7 +1298,7 @@ return [
'spent_x_of_y' => '{amount} / {total} を支出しました',
// new user:
'welcome' => '<strong>Firefly III</strong>へようこそ!このページでは、あなたの収支に関しての基本的な情報が得られます。詳しくは、&rarr;<a href=":asset">Asset Accounts</a>アカウントを確認、あるいは<a href=":budgets">予算</a>や<a href=":reports">レポート</a>ページを見てください。或いは、気ままに見て回るのも良いでしょう。',
'welcome' => 'Firefly IIIへようこそ',
'submit' => '送信',
'submission' => '送信',
'submit_yes_really' => '送信 (私は自分が何をしているかわかっています)',
@ -1313,8 +1322,8 @@ return [
'expense_overview' => '支出先アカウント(支出元アカウント
',
'revenue_overview' => '支出アカウント(収入アカウント)',
'budgetsAndSpending' => 'あなたの予算へ移動',
'budgets_and_spending' => 'あなたの予算へ移動',
'budgetsAndSpending' => '予算と出費',
'budgets_and_spending' => '予算と出費',
'go_to_budget' => '予算',
'go_to_deposits' => '入金へ移動',
'go_to_expenses' => '支出へ移動',
@ -1336,14 +1345,14 @@ return [
'logout' => 'ログアウト',
'logout_other_sessions' => 'すべてのセッションをログアウト',
'toggleNavigation' => 'ナビゲーションを切り替え',
'searchPlaceholder' => '検索条件が空なので、何も見つかりませんでした。',
'searchPlaceholder' => '検索...',
'version' => 'バージョン',
'dashboard' => 'ダッシュボード',
'available_budget' => '予算',
'currencies' => '外貨',
'activity' => '活動',
'usage' => '使用状況',
'accounts' => 'この欄のすべてのアカウントは一致している必要があります。',
'accounts' => 'アカウント',
'Asset account' => '資産勘定',
'Default account' => '資産勘定',
'Expense account' => '支出元アカウント',
@ -1364,7 +1373,7 @@ return [
'liability_direction__short' => '不明',
'liability_direction_null_short' => '不明',
'Liability credit' => '債務信用',
'budgets' => 'まだ予算をお持ちでないようです。<a href=":link">予算</a>ページからいくつか生成するべきです。予算は支出の追跡を維持するのに役立ちます。',
'budgets' => '予算',
'tags' => 'タグ',
'reports' => 'レポート',
'transactions' => 'すべての取引',
@ -1374,10 +1383,10 @@ return [
'moneyManagement' => '資金管理',
'money_management' => '財テク',
'tools' => 'ツール',
'piggyBanks' => '貯金箱へ移動',
'piggy_banks' => '貯金箱へ移動',
'piggyBanks' => '貯金箱',
'piggy_banks' => '貯金箱',
'amount_x_of_y' => '{current} / {total}',
'bills' => '請求',
'bills' => '請求',
'withdrawal' => '出金',
'opening_balance' => '期首残高',
'deposit' => '預金',
@ -1467,7 +1476,7 @@ return [
'balance_amount' => ':start から :end までの口座「:account」から支払われる予算「:budget」の支出',
'no_audit_activity' => ':start から :end までに、口座「<a href=":url" title=":account_name">:account_name</a>」のアクティビティの記録はありません。',
'audit_end_balance' => ':end 末での <a href=":url" title=":account_name">:account_name</a> の口座残高: :balance',
'reports_extra_options' => 'あなたの追加設定はあとからやり直すことも出来ます。',
'reports_extra_options' => '追加オプション',
'report_has_no_extra_options' => 'このレポートには追加オプションはありません',
'reports_submit' => 'レポートを表示',
'end_after_start_date' => 'レポートの終了日は開始日より後でなければいけません。',
@ -1549,7 +1558,7 @@ return [
// piggy banks:
'add_money_to_piggy' => 'ブタの貯金箱 ":name" を編集する',
'piggy_bank' => '貯金箱',
'new_piggy_bank' => '新しいブタの貯金箱を作成する',
'new_piggy_bank' => '新しい貯金箱',
'store_piggy_bank' => '新しいブタの貯金箱を作成する',
'stored_piggy_bank' => '新しいブタの貯金箱を作成する',
'account_status' => '貯蓄口座',
@ -1567,7 +1576,7 @@ return [
'remove' => '削除',
'max_amount_add' => '追加できる最大金額は',
'max_amount_remove' => '削除できる最大金額は',
'update_piggy_button' => '新しいブタの貯金箱を作成する',
'update_piggy_button' => '貯金箱を更新する',
'update_piggy_title' => 'ブタの貯金箱 ":name" を編集する',
'updated_piggy_bank' => 'ブタの貯金箱 ":name" を編集する',
'details' => '詳細',
@ -1596,7 +1605,7 @@ return [
'transaction_journal_information' => '取引',
'transaction_journal_meta' => 'メタ情報',
'transaction_journal_more' => '<strong>Firefly III</strong>へようこそ!このページでは、あなたの収支に関しての基本的な情報が得られます。詳しくは、&rarr;<a href=":asset">Asset Accounts</a>アカウントを確認、あるいは<a href=":budgets">予算</a>や<a href=":reports">レポート</a>ページを見てください。或いは、気ままに見て回るのも良いでしょう。',
'transaction_journal_more' => '詳細情報',
'basic_journal_information' => '取引基本情報',
'transaction_journal_extra' => '追加情報',
'att_part_of_journal' => '保存しました!',
@ -1604,7 +1613,7 @@ return [
'number_of_decimals' => '小数点以下の桁数',
// administration
'administration' => 'ご覧のように、3つの貯金箱があります。プラスやマイナスのボタンでそれぞれの貯金箱のお金の量を調整することができます。貯金箱の名前をクリックするとそれぞれの貯金箱の管理ができます。',
'administration' => '管理',
'user_administration' => 'ユーザー管理',
'list_all_users' => 'すべての取引',
'all_users' => 'すべての取引',
@ -1780,10 +1789,10 @@ return [
'no_transactions_intro_transfers' => '送金はまだありません。資産口座間で送金を行うと、送金として記録されます。',
'no_transactions_imperative_transfers' => 'お金を移動しましたか?それらは記録すべきです:',
'no_transactions_create_transfers' => '新しい振り替えを作成する',
'no_piggies_title_default' => '新しいブタの貯金箱を作成する',
'no_piggies_title_default' => '貯金箱を作成しましょう!',
'no_piggies_intro_default' => 'まだ貯金箱がありません。貯金を分割し把握するのに貯金箱を作ることができます。',
'no_piggies_imperative_default' => '何かのためにお金を貯めていますか?貯金箱を作って把握しましょう:',
'no_piggies_create_default' => '新しいブタの貯金箱を作成する',
'no_piggies_create_default' => '新しい貯金箱を作成する',
'no_bills_title_default' => '新しい請求書',
'no_bills_intro_default' => 'まだ請求がありません。家賃や保険のような定期的な費用の把握のために、請求をつくるこができます。',
'no_bills_imperative_default' => '定期的な請求がありますか?請求を作成し支払いを把握しましょう:',

View File

@ -24,9 +24,9 @@ declare(strict_types=1);
return [
// new user:
'bank_name' => '銀行名',
'bank_name' => '支払い銀行名',
'bank_balance' => '残高',
'savings_balance' => '貯蓄バランス',
'savings_balance' => '貯金残高',
'credit_card_limit' => 'クレジットカード上限額',
'automatch' => '自動的に一致',
'skip' => 'スキップ',
@ -48,11 +48,11 @@ return [
'attachments' => '添付ファイル',
'BIC' => '銀行投資契約',
'verify_password' => 'パスワードのセキュリティを確認',
'source_account' => '支出元のアカウント',
'destination_account' => '送金先のアカウント',
'asset_destination_account' => '送金先のアカウント',
'source_account' => '支出元口座',
'destination_account' => '送金先口座',
'asset_destination_account' => '送金先口座',
'include_net_worth' => '純資産に含める',
'asset_source_account' => '支出元のアカウント',
'asset_source_account' => '支出元口座',
'journal_description' => '説明',
'note' => '備考',
'currency' => '通貨',
@ -106,7 +106,7 @@ return [
'symbol' => '記号',
'code' => 'コード',
'iban' => '国際銀行口座番号',
'account_number' => 'アカウント番号',
'account_number' => '口座番号',
'creditCardNumber' => 'クレジットカード番号',
'has_headers' => 'ヘッダー',
'date_format' => '日付書式',
@ -154,10 +154,10 @@ return [
'tag_areYouSure' => 'タグ「:tag」を削除してもよろしいですか',
'journal_link_areYouSure' => '<a href=":source_link">:source</a> と <a href=":destination_link">:destination</a> の間のリンクを削除してもよろしいですか?',
'linkType_areYouSure' => 'リンクタイプ「:name (:inward/:outward)」を削除してもよろしいですか?',
'permDeleteWarning' => 'Firefly III からの削除は永続的であり、元に戻すことはできません。',
'permDeleteWarning' => 'Firefly IIIからの削除は永久的で、元に戻すことはできません。',
'mass_make_selection' => 'チェックボックスを外せば、その項目が削除されないようにすることができます。',
'delete_all_permanently' => 'この数値は選択されたトリガーには無効です。',
'update_all_journals' => 'チャンネルを更新',
'delete_all_permanently' => '選択した項目を永久に削除する',
'update_all_journals' => 'これらの取引を更新する',
'also_delete_transactions' => 'このアカウントに関連するただ一つの取引も削除されます。|このアカウントに関連する :count 件の取引も削除されます。',
'also_delete_transactions_js' => '取引はありません|このアカウントに関連するただ一つの取引も削除されます。|このアカウントに関連する {count} 件の取引も削除されます。',
'also_delete_connections' => 'このリンクタイプにリンクするただ一つの取引の関連がなくなります。|このリンクタイプにリンクする :count 件の取引の関連がなくなります。',
@ -173,13 +173,13 @@ return [
'check_for_updates' => 'アップデートの確認',
'liability_direction' => '債務の出入',
'delete_object_group' => 'グループ「:title」を削除',
'email' => '新しいメールアドレス',
'email' => 'メールアドレス',
'password' => 'パスワードがリセットされました!',
'password_confirmation' => 'パスワードを変更する',
'blocked' => 'あなたはログアウトしました。ブロックされたアカウントはこのサイトを使うことが出来ません。有効なメールアドレスで登録しましたか?',
'blocked_code' => 'ブロック',
'login_name' => 'あなたはバックアップコードを利用してログインしました。もし再び使用することが出来ないなら、リストから削除してください。',
'is_owner' => '管理者',
'login_name' => 'ログイン',
'is_owner' => '管理者は?',
// import
'apply_rules' => '適用',
@ -191,50 +191,50 @@ return [
// admin
'domain' => 'ドメイン',
'single_user_mode' => 'ユーザー登録の受付を停止する',
'is_demo_site' => 'デモサイトは4時間毎にリセットされることに注意してください。あなたの変更はいつも破棄される可能性がありま。これは自動的に行われ、バグではありません。',
'is_demo_site' => ' デモサイトです',
// import
'configuration_file' => 'ファイル ":name" のアップロードに成功しました。',
'configuration_file' => '構成ファイル',
'csv_comma' => 'コンマ (,)',
'csv_semicolon' => 'セミコロン (;)',
'csv_tab' => 'タブ (非表示)',
'csv_delimiter' => 'この欄のすべてのアカウントは一致している必要があります。',
'client_id' => 'ID',
'app_id' => 'ID',
'csv_delimiter' => 'CSV 区切り文字',
'client_id' => 'クライアントID',
'app_id' => 'アプリID',
'secret' => 'シークレット',
'public_key' => 'APIキー',
'country_code' => 'バックアップコード',
'provider_code' => '取引データ',
'public_key' => '公開鍵',
'country_code' => '国名コード',
'provider_code' => '銀行またはデータ提供会社',
'fints_url' => 'APIキー',
'fints_port' => 'ポート',
'fints_bank_code' => '銀行',
'fints_bank_code' => '銀行コード',
'fints_username' => 'ユーザー名',
'fints_password' => 'パスワードを変更する',
'fints_password' => 'PIN / パスワード',
'fints_account' => '貯蓄口座',
'local_account' => 'Firefly III アカウント',
'from_date' => 'から',
'to_date' => '付範囲',
'due_date' => '付範囲',
'payment_date' => 'クレジットカードの引き落とし日',
'invoice_date' => '付を選択...',
'from_date' => '開始日',
'to_date' => '終了日',
'due_date' => ' 期日',
'payment_date' => '引き落とし日',
'invoice_date' => '領収書発行日',
'internal_reference' => '内部参照',
'inward' => '説明',
'outward' => '説明',
'inward' => '内向きの説明',
'outward' => '外向きの説明',
'rule_group_id' => '規則',
'transaction_description' => '取り引き ":description" を編集する',
'transaction_description' => '取り引き ":description" を編集する',
'first_date' => '日付範囲',
'transaction_type' => '無効なトランザクション形式です。',
'transaction_type' => '取引の種類',
'repeat_until' => '繰り返し回数か、終了日(repeat_until) が必要です。両方は使えません。',
'recurring_description' => '取り引き ":description" を削除する',
'repetition_type' => '最低でも一回の繰り返しが必要です。',
'foreign_currency_id' => 'このフィールドを使用して、通貨と金額を設定します。',
'repetition_end' => '最低でも一回の繰り返しが必要です。',
'repetitions' => '繰り返し回数か、終了日(repeat_until) が必要です。両方は使えません。',
'foreign_currency_id' => '外貨',
'repetition_end' => 'リピート終了',
'repetitions' => 'リピート',
'calendar' => 'カレンダー',
'weekend' => '週末',
'client_secret' => 'クライアントシークレット',
'withdrawal_destination_id' => '送金先のアカウント',
'deposit_source_id' => '支出元のアカウント',
'withdrawal_destination_id' => '送信先口座',
'deposit_source_id' => '支出元口座',
'expected_on' => '予期された',
'paid' => '支払い済み',
'auto_budget_type' => '自動予算',
@ -242,6 +242,6 @@ return [
'auto_budget_period' => '自動予算期間',
'collected' => '受領済み',
'submitted' => '送信済み',
'key' => 'キー',
'key' => '',
'value' => '記録の内容',
];

View File

@ -24,8 +24,8 @@ declare(strict_types=1);
return [
// index
'index_intro' => 'Firefly IIIのインデックスページへようこそ。Firefly IIIの動作を理解するために、この導入にお付き合い下さい。',
'index_accounts-chart' => 'このチャートはあなたの支出元アカウントの残高を表示しています。アカウントの設定でここに表示するかどうか選択できます。',
'index_intro' => 'Firefly IIIのインデックスページへようこそ。このイントロダクションでは、Firefly IIIがどのように機能するのかをご紹介します。',
'index_accounts-chart' => 'このチャートは、お客様の資産口座の現在の残高を表示しています。お客様のご希望でここに表示するかどうか選択できます。',
'index_box_out_holder' => 'この小さな吹き出しとこの横にある吹き出しは収支状況の概要を表示しています。',
'index_help' => 'ページや入力欄について助けが必要なら、このボタンを押して下さい。',
'index_outro' => 'Firefly IIIの多くのページはこのような小さなツアーから始まります。もし質問やコメントがある場合は、私に連絡して下さい。楽しんで',
@ -46,7 +46,7 @@ return [
// budgets index
'budgets_index_intro' => '予算はあなたの財源を管理するために使用され、Firefly IIIの一つの主要機能を構成します。',
'budgets_index_set_budget' => 'FIrefly IIIがあなたが割り当て可能なすべての金額を予算計上したかどうか伝えられるように。あなたの毎期間の合計予算を設定してください。',
'budgets_index_set_budget' => 'Firefly IIIがあなたが割り当て可能なすべての金額を予算計上したかどうか伝えられるように。あなたの毎期間の合計予算を設定してください。',
'budgets_index_see_expenses_bar' => '消費した金額が少しずつこのバーを埋めます。',
'budgets_index_navigate_periods' => '期間を操作することで、予算を事前に簡単に設定できます。',
'budgets_index_new_budget' => 'あなたが妥当だと考える新しい予算を設定してください。',
@ -56,8 +56,8 @@ return [
// reports (index)
'reports_index_intro' => 'あなたの財務状況の詳細を見るにはこれらのレポートを使用してください。',
'reports_index_inputReportType' => 'レポートの種類を選択してください。それぞれのレポートが何を表示するかを見るにはヘルプページを確認してください。',
'reports_index_inputAccountsSelect' => 'あなたが適切だと思うように経費勘定を除外したり追加してください。',
'reports_index_inputDateRange' => '日付範囲の設定はすべてあなた次第です:1日から10年まで。',
'reports_index_inputAccountsSelect' => '経費勘定の除外や追加は自由に行えます。',
'reports_index_inputDateRange' => '選択した日付の範囲は、1日から10年まで自由に設定できます。',
'reports_index_extra-options-box' => 'あなたが選んだレポートに応じて、追加のフィルターやオプションを選択できます。',
// reports (reports)

View File

@ -23,6 +23,6 @@
declare(strict_types=1);
return [
'previous' => '&laquo; 前',
'next' => '次 &raquo;',
'previous' => '&laquo; 前',
'next' => '次 &raquo;',
];

View File

@ -24,9 +24,9 @@ declare(strict_types=1);
return [
'password' => 'パスワードは6文字以上、かつ要件に合致している必要があります。',
'user' => 'そのメールアドレスのユーザーを見つけることができません。',
'token' => 'パスワードリセットトークンが正しくありません。',
'user' => 'このメールアドレスに一致するユーザーがいません。',
'token' => 'このパスワード再設定トークンは無効です。',
'sent' => 'パスワードリセットのためのリンクをメールで送信しました!',
'reset' => 'パスワードがリセットされました!',
'reset' => 'パスワードをリセットしました。',
'blocked' => 'ナイストライ。',
];

View File

@ -58,59 +58,59 @@ return [
'file_invalid_mime' => '「:mime」タイプのファイル ":name" は新しいアップロードとして受け付けられません。',
'file_too_large' => 'ファイル ":name" のアップロードに成功しました。',
'belongs_to_user' => '数値はマイナスにできません。',
'accepted' => 'この欄のすべてのアカウントは一致している必要があります。',
'accepted' => ':attributeを承認してください。',
'bic' => '銀行投資契約',
'at_least_one_trigger' => 'ルールには少なくとも1つのトリガーが必要です。',
'at_least_one_action' => 'ルールには少なくとも1つのアクションが必要です。',
'base64' => 'これは有効な base64 エンコードデータではありません。',
'model_id_invalid' => '指定されたIDはこのモデルでは無効です。',
'less' => ':attributeは10,000,000未満にしてください',
'active_url' => '無効なIBANです。',
'after' => ':attribute は :date よりも後の日付にして下さい。',
'active_url' => ':attributeは、有効なURLではありません。',
'after' => ':attributeには、:dateより後の日付を指定してください。',
'date_after' => '開始日は終了日より前でなければなりません。',
'alpha' => ':attribute は文字のみ含めることが出来ます。',
'alpha_dash' => ':attribute は、文字列、数字、ダッシュ(-)のみ含めることが出来ます。',
'alpha_num' => ':attribute は、文字列と数字のみ含めることが出来ます。',
'array' => 'この欄のすべてのアカウントは一致している必要があります。',
'alpha' => ':attributeには、アルファベッドのみ使用できます。',
'alpha_dash' => ':attributeには、英数字(\'A-Z\',\'a-z\',\'0-9\')とハイフン(-)が使用できます。',
'alpha_num' => ':attributeには、英数字(\'A-Z\',\'a-z\',\'0-9\')が使用できます。',
'array' => ':attributeには、配列を指定してください。',
'unique_for_user' => 'このIBANは既に使われているようです。',
'before' => ':attribute は :date よりも前の日付にして下さい。',
'before' => ':attributeには、:dateより前の日付を指定してください。',
'unique_object_for_user' => 'このIBANは既に使われているようです。',
'unique_account_for_user' => 'このアカウント番号は既に使われているようです。',
'between.numeric' => ':attribute は :min から :max の範囲内にして下さい。',
'between.file' => ':attribute は :min から :max キロバイトの範囲内にして下さい。',
'between.string' => ':attribute は :min から :max 文字の範囲内にして下さい。',
'between.array' => ':attribute は :min から :max 個にして下さい。',
'boolean' => ':attribute 項目は、true または false にして下さい。',
'confirmed' => ':attribute のIDはデータベースに存在しません。',
'date' => '無効なIBANです。',
'between.numeric' => ':attributeには、:minから、:maxまでの数字を指定してください。',
'between.file' => ':attributeには、:min KBから:max KBまでのサイズのファイルを指定してください。',
'between.string' => ':attributeは、:min文字から:max文字にしてください。',
'between.array' => ':attributeの項目は、:min個から:max個にしてください。',
'boolean' => ':attributeには、\'true\'か\'false\'を指定してください。',
'confirmed' => ':attributeが一致しません。',
'date' => ':attributeは、正しい日付ではありません。',
'date_format' => ':attribute は :format と一致しません。',
'different' => ':attribute と :other は、異なっている必要があります。',
'different' => ':attributeと:otherには、異なるものを指定してください。',
'digits' => ':attribute は :digits 桁にして下さい。',
'digits_between' => ':attribute は :min から :max 桁にして下さい。',
'email' => ':attribute は有効なメールアドレスにして下さい。',
'email' => ':attributeは、有効なメールアドレス形式で指定してください。',
'filled' => ':attribute は必須です。',
'exists' => 'この数値は選択された操作には無効です。',
'image' => 'この欄のすべてのアカウントは一致している必要があります。',
'in' => 'この数値は選択された操作には無効です。',
'integer' => 'この欄のすべてのアカウントは一致している必要があります。',
'exists' => '選択された:attributeは、有効ではありません。',
'image' => ':attributeには、画像を指定してください。',
'in' => '選択された:attributeは、有効ではありません。',
'integer' => ':attributeには、整数を指定してください。',
'ip' => ':attribute は有効なIPアドレスにして下さい。',
'json' => ':attribute は有効なJSON文字列にして下さい。',
'max.numeric' => ':attribute は :max 以上にして下さい。',
'max.file' => ':attribute は :max キロバイト以上にして下さい。',
'max.string' => ':attribute は :max 文字以上にして下さい。',
'max.array' => ':attribute は :max 以上のアイテムを持つことはできません。',
'mimes' => ':attributeには、:valuesのファイルを指定してください。',
'min.numeric' => ':attribute は、少なくとも :min 以上にして下さい。',
'lte.numeric' => ':attribute は :value 以下にして下さい。',
'min.file' => ':attribute は :min キロバイト以上にして下さい。',
'min.string' => 'パスワードは6文字以上、かつ要件に合致している必要があります。',
'max.numeric' => ':attributeには、:max以下の数字を指定してください。',
'max.file' => ':attributeには、:max KB以下のファイルを指定してください。',
'max.string' => ':attributeは、:max文字以下にしてください。',
'max.array' => ':attributeの項目は、:max個以下にしてください。',
'mimes' => ':attributeには、:valuesタイプのファイルを指定してください。',
'min.numeric' => ':attributeには、:min以上の数字を指定してください。',
'lte.numeric' => ':attributeは、:value以下でなければなりません。',
'min.file' => ':attributeには、:min KB以上のファイルを指定してください。',
'min.string' => 'attributeは、:min文字以上にしてください。',
'min.array' => ':attribute は :min 個以上にして下さい。',
'not_in' => 'この数値は選択された操作には無効です。',
'numeric' => 'この欄のすべてのアカウントは一致している必要があります。',
'not_in' => '選択された:attributeは、有効ではありません。',
'numeric' => ':attributeには、数字を指定してください。',
'numeric_native' => '国内通貨',
'numeric_destination' => '金額(先)',
'numeric_source' => '金額(元)',
'regex' => 'パスワードリセットトークンが正しくありません。',
'regex' => ':attributeには、有効な正規表現を指定してください。',
'required' => ':attribute 項目は必須です。',
'required_if' => ':otherが:valueの場合、:attributeを指定してください。',
'required_unless' => ':other が :values 以外の場合、:attribute フィールドは必須です。',
@ -119,21 +119,21 @@ return [
'required_without' => ':values が存在しな場合、:attribute は必須です。',
'required_without_all' => ':values が一つも存在しない場合、:attribute は必須です。',
'same' => ':attribute は :other 一致する必要があります。',
'size.numeric' => 'この欄のすべてのアカウントは一致している必要があります。',
'size.numeric' => ':attributeには、:sizeを指定してください。',
'amount_min_over_max' => '最小金額は最大金額より大きくすることはできません。',
'size.file' => ':attribute は :size キロバイトにして下さい。',
'size.string' => ':attribute は :size 文字にしてください。',
'size.array' => ':attribute は :size 個である必要があります。',
'unique' => ':attributeは既に使用されています。',
'string' => 'この欄のすべてのアカウントは一致している必要があります。',
'url' => 'パスワードリセットトークンが正しくありません。',
'string' => ':attributeには、文字を指定してください。',
'url' => ':attributeは、有効なURL形式で指定してください。',
'timezone' => ':attribute は有効なゾーンにしてください。',
'2fa_code' => 'この欄ではその数値は無効です。',
'dimensions' => ':attribute は無効な画像サイズです。',
'distinct' => ':attribute は重複しています。',
'file' => 'ファイル ":name" のアップロードに成功しました。',
'in_array' => ':attribute のIDはデータベースに存在しません。',
'present' => 'この欄のすべてのアカウントは一致している必要があります。',
'file' => ':attributeはファイルでなければいけません。',
'in_array' => ':attributeが:otherに存在しません。',
'present' => ':attributeが存在している必要があります。',
'amount_zero' => '合計金額はゼロにすることはできません。',
'current_target_amount' => '現在の金額は目標金額より少なくなければなりません。',
'unique_piggy_bank_for_user' => 'ブタの貯金箱 ":name" を編集する',
@ -161,7 +161,7 @@ return [
'match' => '入力された情報に誤りがあります。',
'amount_min' => '最低額',
'amount_max' => '上限額',
'title' => '一つ以上の取引がある場合、グループ名は必須です。',
'title' => 'タイトル',
'tag' => 'タグ',
'transaction_description' => '取り引き ":description" を編集する',
'rule-action-value.1' => 'この数値は選択された操作には無効です。',

View File

@ -342,6 +342,15 @@ return [
'search_modifier_bill_is' => 'Bill is ":value"',
'search_modifier_transaction_type' => 'Transaction type is ":value"',
'search_modifier_tag_is' => 'Tag is ":value"',
'search_modifier_date_is_year' => 'Transaction is in year ":value"',
'search_modifier_date_is_month' => 'Transaction is in month ":value"',
'search_modifier_date_is_day' => 'Transaction is on day of month ":value"',
'search_modifier_date_before_year' => 'Transaction is before or in year ":value"',
'search_modifier_date_before_month' => 'Transaction is before or in month ":value"',
'search_modifier_date_before_day' => 'Transaction before or on day of month ":value"',
'search_modifier_date_after_year' => 'Transaction is in or after year ":value"',
'search_modifier_date_after_month' => 'Transaction is in or after month ":value"',
'search_modifier_date_after_day' => 'Transaction is after or on day of month ":value"',
'update_rule_from_query' => 'Update rule ":rule" from search query',
'create_rule_from_query' => 'Create new rule from search query',
'rule_from_search_words' => 'The rule engine has a hard time handling ":string". The suggested rule that fits your search query may give different results. Please verify the rule triggers carefully.',

View File

@ -342,6 +342,15 @@ return [
'search_modifier_bill_is' => 'Contract is ":value"',
'search_modifier_transaction_type' => 'Transactietype is ":value"',
'search_modifier_tag_is' => 'Tag is ":value"',
'search_modifier_date_is_year' => 'Transactie is in jaar ":value"',
'search_modifier_date_is_month' => 'Transactie is in maand ":value"',
'search_modifier_date_is_day' => 'Transactie is op dag van de maand ":value"',
'search_modifier_date_before_year' => 'Transactie is in of voor ":value"',
'search_modifier_date_before_month' => 'Transactie is in of voor maand ":value"',
'search_modifier_date_before_day' => 'Transactie is voor of op dag van de maand ":value"',
'search_modifier_date_after_year' => 'Transactie is in of na jaar ":value"',
'search_modifier_date_after_month' => 'Transactie is in of na maand ":value"',
'search_modifier_date_after_day' => 'Transactie is op of na dag van de maand ":value"',
'update_rule_from_query' => 'Update regel ":rule" middels zoekquery',
'create_rule_from_query' => 'Nieuwe regel op basis van zoekquery',
'rule_from_search_words' => 'Firefly III heeft moeite met deze query: ":string". De voorgestelde regel die past bij je zoekquery kan afwijken. Controleer de regel zorgvuldig.',

View File

@ -342,6 +342,15 @@ return [
'search_modifier_bill_is' => 'Rachunek to ":value"',
'search_modifier_transaction_type' => 'Transakcja jest typu ":value"',
'search_modifier_tag_is' => 'Tag to ":value"',
'search_modifier_date_is_year' => 'Transaction is in year ":value"',
'search_modifier_date_is_month' => 'Transaction is in month ":value"',
'search_modifier_date_is_day' => 'Transaction is on day of month ":value"',
'search_modifier_date_before_year' => 'Transaction is before or in year ":value"',
'search_modifier_date_before_month' => 'Transaction is before or in month ":value"',
'search_modifier_date_before_day' => 'Transaction before or on day of month ":value"',
'search_modifier_date_after_year' => 'Transaction is in or after year ":value"',
'search_modifier_date_after_month' => 'Transaction is in or after month ":value"',
'search_modifier_date_after_day' => 'Transaction is after or on day of month ":value"',
'update_rule_from_query' => 'Aktualizuj regułę ":rule" z zapytania wyszukiwania',
'create_rule_from_query' => 'Utwórz nową regułę z zapytania wyszukiwania',
'rule_from_search_words' => 'Silnik reguł ma problemy z obsługą ":string". Sugerowana reguła, która pasuje do Twojego zapytania może dawać różne wyniki. Proszę dokładnie sprawdź wyzwalacze reguł.',

View File

@ -342,6 +342,15 @@ return [
'search_modifier_bill_is' => 'Conta é ":value"',
'search_modifier_transaction_type' => 'O tipo da transação é ":value"',
'search_modifier_tag_is' => 'A etiqueta é ":value"',
'search_modifier_date_is_year' => 'Transaction is in year ":value"',
'search_modifier_date_is_month' => 'Transaction is in month ":value"',
'search_modifier_date_is_day' => 'Transaction is on day of month ":value"',
'search_modifier_date_before_year' => 'Transaction is before or in year ":value"',
'search_modifier_date_before_month' => 'Transaction is before or in month ":value"',
'search_modifier_date_before_day' => 'Transaction before or on day of month ":value"',
'search_modifier_date_after_year' => 'Transaction is in or after year ":value"',
'search_modifier_date_after_month' => 'Transaction is in or after month ":value"',
'search_modifier_date_after_day' => 'Transaction is after or on day of month ":value"',
'update_rule_from_query' => 'Atualizar regra ":rule" da pesquisa',
'create_rule_from_query' => 'Criar nova regra a partir da pesquisa',
'rule_from_search_words' => 'O mecanismo de regra tem dificuldade para tratar ":string". A regra sugerida que se encaixa na sua pesquisa pode retornar resultados diferentes. Por favor, verifique os gatilhos das regras cuidadosamente.',

View File

@ -342,6 +342,15 @@ return [
'search_modifier_bill_is' => 'A fatura é ":value"',
'search_modifier_transaction_type' => 'Tipo de transacção é ":value"',
'search_modifier_tag_is' => 'A etiqueta é ":value"',
'search_modifier_date_is_year' => 'Transaction is in year ":value"',
'search_modifier_date_is_month' => 'Transaction is in month ":value"',
'search_modifier_date_is_day' => 'Transaction is on day of month ":value"',
'search_modifier_date_before_year' => 'Transaction is before or in year ":value"',
'search_modifier_date_before_month' => 'Transaction is before or in month ":value"',
'search_modifier_date_before_day' => 'Transaction before or on day of month ":value"',
'search_modifier_date_after_year' => 'Transaction is in or after year ":value"',
'search_modifier_date_after_month' => 'Transaction is in or after month ":value"',
'search_modifier_date_after_day' => 'Transaction is after or on day of month ":value"',
'update_rule_from_query' => 'Actualizar regra ":rule" da pesquisa',
'create_rule_from_query' => 'Criar nova regra a partir da pesquisa',
'rule_from_search_words' => 'O mecanismo de regras tem dificuldade com ":string". A regra sugerida que se encaixa na pesquisa pode mostrar resultados diferentes. Por favor, verifique os gatilhos das regras cuidadosamente.',

View File

@ -342,6 +342,15 @@ return [
'search_modifier_bill_is' => 'Factura este ":value"',
'search_modifier_transaction_type' => 'Tipul tranzacției este ":value"',
'search_modifier_tag_is' => 'Eticheta este ":value"',
'search_modifier_date_is_year' => 'Transaction is in year ":value"',
'search_modifier_date_is_month' => 'Transaction is in month ":value"',
'search_modifier_date_is_day' => 'Transaction is on day of month ":value"',
'search_modifier_date_before_year' => 'Transaction is before or in year ":value"',
'search_modifier_date_before_month' => 'Transaction is before or in month ":value"',
'search_modifier_date_before_day' => 'Transaction before or on day of month ":value"',
'search_modifier_date_after_year' => 'Transaction is in or after year ":value"',
'search_modifier_date_after_month' => 'Transaction is in or after month ":value"',
'search_modifier_date_after_day' => 'Transaction is after or on day of month ":value"',
'update_rule_from_query' => 'Actualizați regula ":rule" din interogarea de căutare',
'create_rule_from_query' => 'Creați o nouă regulă din interogarea de căutare',
'rule_from_search_words' => 'Motorul regulii are dificultăți în manipularea ":string". Regula sugerată care se potrivește interogării dvs. poate da rezultate diferite. Vă rugăm să verificați declanșatorii regulii cu atenție.',

View File

@ -342,6 +342,15 @@ return [
'search_modifier_bill_is' => 'Счёт на оплату ":value"',
'search_modifier_transaction_type' => 'Тип транзакции - ":value"',
'search_modifier_tag_is' => 'Тег - ":value"',
'search_modifier_date_is_year' => 'Transaction is in year ":value"',
'search_modifier_date_is_month' => 'Transaction is in month ":value"',
'search_modifier_date_is_day' => 'Transaction is on day of month ":value"',
'search_modifier_date_before_year' => 'Transaction is before or in year ":value"',
'search_modifier_date_before_month' => 'Transaction is before or in month ":value"',
'search_modifier_date_before_day' => 'Transaction before or on day of month ":value"',
'search_modifier_date_after_year' => 'Transaction is in or after year ":value"',
'search_modifier_date_after_month' => 'Transaction is in or after month ":value"',
'search_modifier_date_after_day' => 'Transaction is after or on day of month ":value"',
'update_rule_from_query' => 'Обновить правило ":rule" из поискового запроса',
'create_rule_from_query' => 'Создать новое правило из поискового запроса',
'rule_from_search_words' => 'Механизм правил не справился с обработкой ":string". Предлагаемое правило, удовлетворяющее вашему поисковому запросу, может дать различные результаты. Пожалуйста, тщательно проверьте условия правила.',

View File

@ -342,6 +342,15 @@ return [
'search_modifier_bill_is' => 'Účtenka je ":value"',
'search_modifier_transaction_type' => 'Typ transakcie je ":value"',
'search_modifier_tag_is' => 'Štítok je ":value"',
'search_modifier_date_is_year' => 'Transaction is in year ":value"',
'search_modifier_date_is_month' => 'Transaction is in month ":value"',
'search_modifier_date_is_day' => 'Transaction is on day of month ":value"',
'search_modifier_date_before_year' => 'Transaction is before or in year ":value"',
'search_modifier_date_before_month' => 'Transaction is before or in month ":value"',
'search_modifier_date_before_day' => 'Transaction before or on day of month ":value"',
'search_modifier_date_after_year' => 'Transaction is in or after year ":value"',
'search_modifier_date_after_month' => 'Transaction is in or after month ":value"',
'search_modifier_date_after_day' => 'Transaction is after or on day of month ":value"',
'update_rule_from_query' => 'Aktualizovať pravidlo ":rule" vyhľadávaným výrazom',
'create_rule_from_query' => 'Vytvoriť z vyhľadávaného výrazu nové pravidlo',
'rule_from_search_words' => 'Pravidlo má ťažkosti so spracovaním „:string“. Navrhované pravidlo, ktoré vyhovuje vášmu vyhľadávaciemu pojmu, môže poskytnúť rôzne výsledky. Dôkladne skontrolujte spúšťače pravidiel.',

View File

@ -342,6 +342,15 @@ return [
'search_modifier_bill_is' => 'Nota är ":value"',
'search_modifier_transaction_type' => 'Transaktionstypen är ":value"',
'search_modifier_tag_is' => 'Taggen är ":value"',
'search_modifier_date_is_year' => 'Transaction is in year ":value"',
'search_modifier_date_is_month' => 'Transaction is in month ":value"',
'search_modifier_date_is_day' => 'Transaction is on day of month ":value"',
'search_modifier_date_before_year' => 'Transaction is before or in year ":value"',
'search_modifier_date_before_month' => 'Transaction is before or in month ":value"',
'search_modifier_date_before_day' => 'Transaction before or on day of month ":value"',
'search_modifier_date_after_year' => 'Transaction is in or after year ":value"',
'search_modifier_date_after_month' => 'Transaction is in or after month ":value"',
'search_modifier_date_after_day' => 'Transaction is after or on day of month ":value"',
'update_rule_from_query' => 'Uppdatera regel ":rule" från sökfråga',
'create_rule_from_query' => 'Skapa ny regel från sökfrågan',
'rule_from_search_words' => 'Regelmotorn har svårt att hantera ":string". Den föreslagna regeln som passar din sökfråga kan ge olika resultat. Kontrollera regelutlösarna noggrant.',

View File

@ -343,6 +343,15 @@ return [
'search_modifier_bill_is' => 'Fatura ":value"',
'search_modifier_transaction_type' => 'İşlem türü ":value"',
'search_modifier_tag_is' => 'Tag is ":value"',
'search_modifier_date_is_year' => 'Transaction is in year ":value"',
'search_modifier_date_is_month' => 'Transaction is in month ":value"',
'search_modifier_date_is_day' => 'Transaction is on day of month ":value"',
'search_modifier_date_before_year' => 'Transaction is before or in year ":value"',
'search_modifier_date_before_month' => 'Transaction is before or in month ":value"',
'search_modifier_date_before_day' => 'Transaction before or on day of month ":value"',
'search_modifier_date_after_year' => 'Transaction is in or after year ":value"',
'search_modifier_date_after_month' => 'Transaction is in or after month ":value"',
'search_modifier_date_after_day' => 'Transaction is after or on day of month ":value"',
'update_rule_from_query' => 'Update rule ":rule" from search query',
'create_rule_from_query' => 'Create new rule from search query',
'rule_from_search_words' => 'The rule engine has a hard time handling ":string". The suggested rule that fits your search query may give different results. Please verify the rule triggers carefully.',

View File

@ -342,6 +342,15 @@ return [
'search_modifier_bill_is' => 'Bill is ":value"',
'search_modifier_transaction_type' => 'Transaction type is ":value"',
'search_modifier_tag_is' => 'Tag is ":value"',
'search_modifier_date_is_year' => 'Transaction is in year ":value"',
'search_modifier_date_is_month' => 'Transaction is in month ":value"',
'search_modifier_date_is_day' => 'Transaction is on day of month ":value"',
'search_modifier_date_before_year' => 'Transaction is before or in year ":value"',
'search_modifier_date_before_month' => 'Transaction is before or in month ":value"',
'search_modifier_date_before_day' => 'Transaction before or on day of month ":value"',
'search_modifier_date_after_year' => 'Transaction is in or after year ":value"',
'search_modifier_date_after_month' => 'Transaction is in or after month ":value"',
'search_modifier_date_after_day' => 'Transaction is after or on day of month ":value"',
'update_rule_from_query' => 'Update rule ":rule" from search query',
'create_rule_from_query' => 'Create new rule from search query',
'rule_from_search_words' => 'The rule engine has a hard time handling ":string". The suggested rule that fits your search query may give different results. Please verify the rule triggers carefully.',

Some files were not shown because too many files have changed in this diff Show More